![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Сравнение файлов. |
|
Delphi - [решено] Сравнение файлов.
|
Старожил Сообщения: 175 |
Доброго времени суток.Подскажите пожалуйста как реализовать вот такую штуку:
Имеются 2 файла в которых содержится вот такая информация (на фото ) http://forum.oszone.net/attachment.p...1&d=1268408564 Цитата:
Приведу пример Цитата:
|
|||
Отправлено: 18:47, 12-03-2010 |
Ветеран Сообщения: 1133
|
Профиль | Отправить PM | Цитировать Snake750, не совсем понятно, что конкретно вам надо.
Обрабатывать текстовый файл можно как угодно, читать его построчно, прочитать весь файл как одну строку, прочитать файл в массив символов, как массив байт... Как бы привести скриншоты, это хорошо, но что дальше? Ну сравнили файлы, записать результат сравнения в третий файл? Вывести на экран сообщение? или что-то ещё... Вот, накидал вам простой пример обработки текстового файла с последующим заполнением его в ListView. |
------- Отправлено: 00:37, 13-03-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Serega,Имеется программа1 в которую я ввожу исходные данные (х и у) и получаю результат (r и q.)
Эта программа записывает эти значения в файл1 вот в таком ввиде Для лучшего понимания предоставлю таблицу наборов тестов Входные данные Результат (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 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 Программа расчитана на работу с числами и если ввести вместо х или у какой-либо символ(пусть будет "А") то программа запишет в файл такую комбинацию: Во второй файл я записываю тоже самое но не через программу а вручную. А потом программа должна сравить х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 Программа сравнивает файл1 и файл2. Так как y1 и у2 не равны программа выводит на экран комбинацию И количество совпадений SC будет равно 6,так как всего наборов было 7 и один из них не совпал. Я понятно объяснил что делает программа? |
Отправлено: 01:41, 13-03-2010 | #3 |
Ветеран Сообщения: 1133
|
Профиль | Отправить PM | Цитировать Цитата Snake750:
Цитата Snake750:
Как вариант, могу вам подсказать, сначала читайте целиком строку из первого файла, затем строку из второго файла, производите обработку строки из первого, затем обработку строки из второго файла. При сравнении используйте StrToInt, предварительно проверив, что ваше значение не слово error. |
||
------- Отправлено: 22:11, 13-03-2010 | #4 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Serega, нет.Я не прошу сделать за меня все.Подскажите как считать 4 параметра со строки в массивы x[i],y[i],q[i],r[i] и все.Можно прямо тут кодом.Я расспасал как работает программа для того чтобы вам было понятнее для чего мне необходимо считать параметры
И лучще всего чтобы этот маленький кусочек кода был написан не конкретно под Делфи,а его можно было запустить на простом Паскале.(без привязки к компоненатам делфи а простыми процедурами обычного Паскаля) |
|
Отправлено: 22:39, 13-03-2010 | #5 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Господа форумчане.Ни у что никто не знает как считать 4 параметра из строчки в массивы
|
Отправлено: 22:43, 14-03-2010 | #6 |
Ветеран Сообщения: 1133
|
Профиль | Отправить PM | Цитировать Цитата Snake750:
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; Единственное забыл добавить проверку на слово error. |
|
------- Последний раз редактировалось Serega, 15-03-2010 в 09:19. Отправлено: 00:42, 15-03-2010 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сравнение текстовых файлов | 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 |
|