Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Сравнение файлов.

Ответить
Настройки темы
Delphi - [решено] Сравнение файлов.

Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: jpg SNC00063.jpg
(167.8 Kb, 35 просмотров)
Доброго времени суток.Подскажите пожалуйста как реализовать вот такую штуку:
Имеются 2 файла в которых содержится вот такая информация (на фото )
http://forum.oszone.net/attachment.p...1&d=1268408564

Цитата:
Программа должна сравнивать эти 2 фаила а именно:в обоих файлах есть 4 числа:x, y, r, q.Сначала нужно сравнить х и у и если они равны то проверить равность q и r. Смысл в том что если эти числа не равны то программа должна вывести комбинацию (x,y,r,q).
У меня встала загвозка при считывании значении с файла.Как считать со строки сразу 4 значение?
Приведу пример
Цитата:
50(пробел) 1 (пробел) 50 (пробел)0
Необходимо считать числа этой строки в переменные x,y,r,q;
И так проделать для всех строк.Я знаю как считать до пробела а вот как после него считать не знаю.

Отправлено: 18:47, 12-03-2010

 

Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z Project.7z
(2.1 Kb, 47 просмотров)

Snake750, не совсем понятно, что конкретно вам надо.
Обрабатывать текстовый файл можно как угодно, читать его построчно, прочитать весь файл как одну строку, прочитать файл в массив символов, как массив байт...
Как бы привести скриншоты, это хорошо, но что дальше? Ну сравнили файлы, записать результат сравнения в третий файл? Вывести на экран сообщение? или что-то ещё...
Вот, накидал вам простой пример обработки текстового файла с последующим заполнением его в ListView.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:37, 13-03-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить PM | Цитировать


Serega,Имеется программа1 в которую я ввожу исходные данные (х и у) и получаю результат (r и q.)
Эта программа записывает эти значения в файл1 вот в таком ввиде
Код: Выделить весь код
x(пробел) y(пробел) r(пробел) q(пробел)
Для лучшего понимания предоставлю таблицу наборов тестов
Код: Выделить весь код
Входные данные                         Результат
(x,y)                                   (r,q)
0,1                                      0,0 
0,9999999                                0,0
9999999,1                                9999999,1
0,50                                     0,0
50,1                                     50,0
0,0                                      error
1,99999991                               error
При данном наборе тестов в файл1 будет записано:


Код: Выделить весь код
0 1 0.0000000000000000E+0000 0.0000000000000000E+0000
0 9999999  0.0000000000000000E+0000 0.0000000000000000E+0000
9999999 1 9.9999900000000E+0007 0.0000000000000000E+0000    
0 50 0.0000000000000000E+0000 0.0000000000000000E+0000
50 1 5.0000000000E+0001 0.0000000000000000E+0000
0 0 error
1 99999991 error
Слово "error" означает что введен некорректный набор тестов(например при наборе 0,0 в программе происходит деление на 0) по этому результатом работы программы на таком наборе х,у будет слово "error"
Программа расчитана на работу с числами и если ввести вместо х или у какой-либо символ(пусть будет "А") то программа запишет в файл такую комбинацию:
Код: Выделить весь код
1 A error
Во второй файл я записываю тоже самое но не через программу а вручную.
Код: Выделить весь код
0 1 00 
0 9999999 0 0
9999999 1 9999999 1
0 50 0 0
50 1 50 0
0 0 error
1 99999991 error
А потом программа должна сравить х1 и x2 и у1 и у2(где,x1-значение x1 из файла1, x2-значение x2 из файла2 и т.д) .
Если они равны то:
Если Е(епсилан вводится с клавиатуры)<=|r1-r2| (где,r1-значение r1 из файла1, r2-значение r2 из файла2) тогда
Если Е(епсилан вводится с клавиатуры)<=|q1-q2| (где,q1-значение q1 из файла1, q2-значение q2 из файла2) тогда к SC (количеству совпавших комбинация):=SC+1
иначе SC (количеству совпавших комбинация):=SC и вывести на экран комбинацию х у r q на которых произошло несовпадение
Если r и q не равны то вывести на экран количество не совпавших комбинация r и q
Приведу пример:
В файле1 содержится информация вида
Код: Выделить весь код
0 1 0.0000000000000000E+0000 0.0000000000000000E+0000
0 9999999  0.0000000000000000E+0000 0.0000000000000000E+0000
9999999 1 9.9999900000000E+0007 0.0000000000000000E+0000    
0 50 0.0000000000000000E+0000 0.0000000000000000E+0000
50 1 5.0000000000E+0001 0.0000000000000000E+0000
0 0 error
1 99999991 error
В файле2 вида:
Код: Выделить весь код
0 2 0 0 
0 9999999 0 0
9999999 1 9999999 1
0 50 0 0
50 1 50 0
0 0 error
1 99999991 error
Программа сравнивает файл1 и файл2.
Код: Выделить весь код
x1=0 y1=1 r1=0.0000000000000000E+0000 q1=0.0000000000000000E+0000
x2=0 y2=2 r1=0 q1=0
Так как y1 и у2 не равны программа выводит на экран комбинацию
Код: Выделить весь код
0 2 0 0
И количество совпадений SC будет равно 6,так как всего наборов было 7 и один из них не совпал.
Я понятно объяснил что делает программа?

Отправлено: 01:41, 13-03-2010 | #3


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Snake750:
Я понятно объяснил что делает программа? »
Вполне, т.е. вы мне предлагаете написать за вас программу? Тогда вы не по адресу, вы спросили:
Цитата Snake750:
Как считать со строки сразу 4 значение? »
Я вам привёл пример обработки текстового файла.
Как вариант, могу вам подсказать, сначала читайте целиком строку из первого файла, затем строку из второго файла, производите обработку строки из первого, затем обработку строки из второго файла. При сравнении используйте StrToInt, предварительно проверив, что ваше значение не слово error.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:11, 13-03-2010 | #4


Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить PM | Цитировать


Serega, нет.Я не прошу сделать за меня все.Подскажите как считать 4 параметра со строки в массивы x[i],y[i],q[i],r[i] и все.Можно прямо тут кодом.Я расспасал как работает программа для того чтобы вам было понятнее для чего мне необходимо считать параметры

И лучще всего чтобы этот маленький кусочек кода был написан не конкретно под Делфи,а его можно было запустить на простом Паскале.(без привязки к компоненатам делфи а простыми процедурами обычного Паскаля)

Отправлено: 22:39, 13-03-2010 | #5


Аватара для Snake750

Старожил


Сообщения: 175
Благодарности: 0

Профиль | Отправить PM | Цитировать


Господа форумчане.Ни у что никто не знает как считать 4 параметра из строчки в массивы

Отправлено: 22:43, 14-03-2010 | #6


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Snake750:
Подскажите как считать 4 параметра со строки в массивы x[i],y[i],q[i],r[i] и все. »
Мне кажется лучше считать весь файл в матрицу, пример:
Код: Выделить весь код
type
  TMatrixRow = array of Integer;
  TMatrix = array of TMatrixRow;

procedure FillingOfMatrix(const FileName: string; var Matrix: TMatrix);
var
  txt: TextFile;
  tmp: string;
  pos_simbol, row, col, value, e: Integer;
begin
  AssignFile(txt, FileName); Reset(txt);
  row:= 0;
  while not Eof(txt) do
    begin
      col:= 0;
      SetLength(Matrix, row+1, 4);
      Readln(txt, tmp); // читаем строку
      repeat
        while (tmp <> '') and (tmp[1] = ' ') do Delete(tmp, 1, 1); // удаляем пробелы в начале строки, если есть
        if tmp <> '' then // если строка не пустая, то
          begin
            pos_simbol:= Pos(' ', tmp); // определяем расположение пробела
            if pos_simbol = 0 then
              begin
                pos_simbol:= Length(tmp); // если пробелов не осталось, то берём всю длину строки
                Val(Copy(tmp, 1, pos_simbol), value, e);
              end
            else Val(Copy(tmp, 1, pos_simbol-1), value, e);
            Matrix[row, col]:= value; // задаём значение
            Delete(tmp, 1, pos_simbol); // удаляем до пробела
            Inc(col); // увеличиваем счётчик столбцов
          end;
      until tmp = '';
      Inc(row); // увеличиваем счётчик строк
    end;
  CloseFile(txt);
end;
P.S.
Единственное забыл добавить проверку на слово error.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Последний раз редактировалось Serega, 15-03-2010 в 09:19.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:42, 15-03-2010 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Сравнение файлов.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Сравнение текстовых файлов Speedy Программное обеспечение Windows 9 30-03-2015 02:42
Сравнение папок Speedy Хочу все знать 14 31-08-2013 20:55
CMD/BAT - [решено] Сравнение двух файлов>ветвление "fc" или "diff" dARKest Скриптовые языки администрирования Windows 4 06-07-2009 23:02
C/C++ - Сравнение картинок laro4ka Программирование и базы данных 4 25-11-2008 11:24
Сравнение файлов Guest Программирование и базы данных 6 24-04-2004 04:47




 
Переход