Delphi сравнить два файла
Суть задачи такова: Сравнить содержимое файла 1.txt и файла 2.txt и сохранить в файл 3.txt уникальные строки. То есть исключить одинаковые строки, которые есть в файлах 1.txt и 2.txt и в файл 3.txt записать только уникальные строки.
Я делаю это так:
Все работает но: если файлы в 250 мегабайт то оперативная помять, моя, полностью загружается. Ну это естественно, поскольку я загружаю- эти файлы и сравниваю их в памяти (тут, конечно, все зависит от того - сколько у кого оперативной памяти и какого размера файлы).
Вопрос: Подскажите, есть ли другие варианты решение этой задачи, без загрузки в память. Не обязательно что бы скорость была большущая, просто что бы не грузить в память.
@Татьяна Делаете через вложенные циклы. Читаете строчку в первом файла, дальше циклом ищите вхождение (через тот же ReadLn) во втором файле. Если нет совпадения, то пишите текст в третий файл. @Татьяна Конструкци readln — базовая конструкция Паскаля. Я могу только посоветовать хоть немного потратить времени на изучение основ языка, на котором вы хотите программировать. ;-)Татьяна, можно прочитать таким образом:
Комментарии даны в коде. Такой "костыльный" путь я избрал для того,чтобы суметь определить количество строк в файлах. Можно было применить вложенный цикл (как предложено в комментариях), но, признаться, я не пойму, как решить проблему с выбором "эталонного" файла - количество срок-то ведь неодинаково!
Если файл А имеет 10 строк, а файл Б имеет 20 строк, то, согласно указанной последовательности, алгоритм со вложенным циклом переберет 10 строк файла А и остановится ( EndOfFile ), в то время, как 10 оставшихся строк файла Б будут невостребованны (мы не сможем расценить их как уникальные, поскольку цикл уже закончился не дойдя до этих строк). Тем не менее, буду рад (учиться всегда полезно), если кто-нибудь предоставит более элегантное решение.
Протестировал на двух текстовых файлах (не более 20 строк). Разницу находит и записывает в файл корректно.
Читайте также: