Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2007, 18:11   #1
BR17UY
 
Регистрация: 13.04.2007
Сообщений: 6
Печаль Сравнение текстовых файлов

Вот такая ситуация!
Надо сравнить два текстовых файла.
Я посторочно из первого читаю текст.
Затем првоеряю, есть ли строка во втором файле.
Если она есть мне нужно её удалить из второго...
Как бы это можно было сделать?
Или хотя бы, как можно второй файл полсностью прочитать в String
переменную? Чтобы затем удалить с Pos(File2, начало, конец).
Ато в string переменную читается только построчно...
Заранее благодарен...
BR17UY вне форума Ответить с цитированием
Старый 01.05.2007, 18:47   #2
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

Попробуй сделать масив строк Array[1..(тут число которое твоя програма можэт максимально обрабатывать(используй константу для удобства))] of string;
или просто Pchar(строка), но я не знаю точно как оно действует..
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 01.05.2007, 19:33   #3
PAVEL315
Форумчанин Подтвердите свой е-майл
 
Аватар для PAVEL315
 
Регистрация: 18.11.2006
Сообщений: 172
По умолчанию

AnsiStrComp - сравнивает 2 строки с учётом регистра,
AnsiStrIComp - тоже самое, но без учёта регистра...
Модуль - SysUtils.
Если это не то, то используй EOLn и OEF
Думаю разберёшся...
дык!
PAVEL315 вне форума Ответить с цитированием
Старый 01.05.2007, 21:27   #4
Yogurt
Пользователь
 
Аватар для Yogurt
 
Регистрация: 22.01.2007
Сообщений: 25
По умолчанию

[quote=BR17UY;18126]
Если она есть мне нужно её удалить из второго...
Как бы это можно было сделать?
[quote]

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

...
var
F1,F2:TextFile;
S1,S2:string;
...
While (not EOF(F1)) and (not EOF(F2)) do
read(F1,S1);
read(F2,S2);
If S1<>S2 then break;
end;
...
Yogurt вне форума Ответить с цитированием
Старый 02.05.2007, 20:10   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

есть класс Tstringlist

Код:
  var
    st:Tstringlist;
    str:string;
 begin
  st:=...create;

  st.loadfromfile(....);
  ...
  str:=st.strings[5]; //str = шестая строка файла
  ...
  st.savetofile(...);
rpy3uH вне форума Ответить с цитированием
Старый 03.05.2007, 00:54   #6
BR17UY
 
Регистрация: 13.04.2007
Сообщений: 6
По умолчанию

Пасиб ребят, что не бросили в беде.
Если быть конкретным, то задача такова...
Есть два файла: cmd.txt и syst.txt.
cmd.txt - скачивается из нета, он содержит команды для выполнения.
syst.txt - основной командный файл, из него прога уже читает отфильтрованные команды.
Содержимое cmd.txt:
L www.supersite.ru/files/fils.exe
D www.nnov.ru/files/setup.exe (ссылки чисто для примера)
Содержимое syst.txt:
L www.supersite.ru/files/prog.exe
L www.nnov.ru/files/setup.exe
Как стало наверное понятно, ссылки начинающиеся с буквы L просто дописываются в файл syst.txt
А ссылки начинающиеся с буквы D - должны быть вырезаны из syst.txt
Так как D - это отмена загрузки той или иной ссылки.
Если строка из cmd.txt начинается с буквы D - значит находим ссыку в syst.txt и удаляем её от туда...
Вот собственно и всё!
Но пасиб, что предложили альтернативы, обязательно учту!
BR17UY вне форума Ответить с цитированием
Старый 03.05.2007, 20:18   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

так в чём сложность????в чём проблема?
для получения индекса строки есть функция indexOf если результат -1 то не найдена, только надо сначала переправить первый символ
str[1]:='L';
rpy3uH вне форума Ответить с цитированием
Старый 03.05.2007, 20:41   #8
BR17UY
 
Регистрация: 13.04.2007
Сообщений: 6
По умолчанию

Я с тобой согласен rpy3uH :-)
В общем сложности то и нету... Что-то подсказывает, что наиболее реальным будет использование массивов. Просто пишу содержимое файлов в два массива. Потом анализирую, и либо дописываю в массив, либо игнорирую новые ссылки. А потом переписываю файл syst.txt
Хотя может есть и более грамотное решение поставленной задачи ?
BR17UY вне форума Ответить с цитированием
Старый 04.05.2007, 10:00   #9
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

Что-то мне не особо нравится вся эта работа с файловыми переменными, особенно когда компьютер вырубается. Я бы лучше в Edit через Loadfromfile загружал, а потом уже проводил сравнения строк. Тем более файл текстовый. А Edit можно и невидимым сделать.
Трофимов Александр вне форума Ответить с цитированием
Старый 04.05.2007, 20:17   #10
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

не Edit, а Memo......
использование memo или stringlist намного лучше
rpy3uH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор компонента для работы с содержимым текстовых файлов[Delphi] sergey31 Помощь студентам 2 28.08.2008 16:53
копирование текстовых файлов teacher Общие вопросы Delphi 4 16.02.2008 20:29
как загрузить в ListBox несколько текстовых файлов? One.Love Общие вопросы Delphi 5 14.01.2008 11:54
Слияние двух текстовых файлов nataly_ukr Общие вопросы Delphi 5 26.12.2007 16:45
Сравнение 2-х файлов asale Microsoft Office Excel 17 03.06.2007 15:58