Delphi сравнить два файла

Обновлено: 04.07.2024

Суть задачи такова: Сравнить содержимое файла 1.txt и файла 2.txt и сохранить в файл 3.txt уникальные строки. То есть исключить одинаковые строки, которые есть в файлах 1.txt и 2.txt и в файл 3.txt записать только уникальные строки.

Я делаю это так:

Все работает но: если файлы в 250 мегабайт то оперативная помять, моя, полностью загружается. Ну это естественно, поскольку я загружаю- эти файлы и сравниваю их в памяти (тут, конечно, все зависит от того - сколько у кого оперативной памяти и какого размера файлы).

Вопрос: Подскажите, есть ли другие варианты решение этой задачи, без загрузки в память. Не обязательно что бы скорость была большущая, просто что бы не грузить в память.

@Татьяна Делаете через вложенные циклы. Читаете строчку в первом файла, дальше циклом ищите вхождение (через тот же ReadLn) во втором файле. Если нет совпадения, то пишите текст в третий файл. @Татьяна Конструкци readln — базовая конструкция Паскаля. Я могу только посоветовать хоть немного потратить времени на изучение основ языка, на котором вы хотите программировать. ;-)

Татьяна, можно прочитать таким образом:

Комментарии даны в коде. Такой "костыльный" путь я избрал для того,чтобы суметь определить количество строк в файлах. Можно было применить вложенный цикл (как предложено в комментариях), но, признаться, я не пойму, как решить проблему с выбором "эталонного" файла - количество срок-то ведь неодинаково!

Если файл А имеет 10 строк, а файл Б имеет 20 строк, то, согласно указанной последовательности, алгоритм со вложенным циклом переберет 10 строк файла А и остановится ( EndOfFile ), в то время, как 10 оставшихся строк файла Б будут невостребованны (мы не сможем расценить их как уникальные, поскольку цикл уже закончился не дойдя до этих строк). Тем не менее, буду рад (учиться всегда полезно), если кто-нибудь предоставит более элегантное решение.

Протестировал на двух текстовых файлах (не более 20 строк). Разницу находит и записывает в файл корректно.


784 2 2 золотых знака 5 5 серебряных знаков 18 18 бронзовых знаков Все, я разобралась. Огромная благодарность Вам Дмитрий! Все работает как нужно именно то что я хотела.!

Читайте также: