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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2012, 14:56   #1
erzhik_s
Новичок
Джуниор
 
Регистрация: 04.11.2008
Сообщений: 2
Вопрос Удалить из файла похожие строки

Существует файл с данными:

text1.text2
text.text1.text2
string1.string2
string.string1.string2.string3

Как удалить строки что бы в итоги было:
text1.text2
string1.string2
Программирование - как и любовь - одно слово, за которым скрывается бесконечное множество занятий.
erzhik_s вне форума Ответить с цитированием
Старый 18.04.2012, 17:43   #2
IvaD
Пользователь
 
Аватар для IvaD
 
Регистрация: 15.11.2011
Сообщений: 16
По умолчанию

На скорую руку=) В качестве примера. Кидаешь на форму Memo и Button.
И кнопку пишешь:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var e,i: Integer;
j:String;
begin
  memo1.Lines.LoadFromFile('Твой файл');  \\ Грузим файл, не забываем указать путь к нему=)
for e:=0 to  Memo1.Lines.Count-1 do    \\ С первой по последнюю строку
  begin
    j:=Memo1.Lines[e];                       \\ В качестве искомого теста берём первую строку
      for i:=e+1 to Memo1.Lines.Count-1 do              \\ Со следующей строки по последнюю
        begin
          if AnsiPos(j, Memo1.Lines[i])<>0 then                 \\ Если нашли
            begin
              Memo1.Lines.Delete(i);                                 \\ Удаляем
            end;
        end;
  end;
  Memo1.Lines.SaveToFile('Твой файл');                        \\ Сохраняем свой файл 
end;
IvaD вне форума Ответить с цитированием
Старый 18.04.2012, 18:13   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

IvaD
категорически не согласен.

Вы делаете традиционную ошибку: в ПРЯМОМ цикле FOR нельзя удалять объекты, которые зависят от счётчика цикла!!

нужно использовать другие виды цикла (while/repeat) или крутить цикл в ОБРАТНУЮ сторону. например, так:
Код:
for e:=Memo1.Lines.Count-1 downto 1   do    \\ С последней строку по первую
  begin
     sFind := Memo1.Lines[e];                       \\ В качестве искомого теста берём текущую строку
      for i:=e-1 downto 0 do              \\ Со следующей строки по последнюю
        begin
          if AnsiPos(sFind, Memo1.Lines[i])<>0 then                 \\ Если нашли
              Memo1.Lines.Delete(i);                                 \\ Удаляем
        end;
end;

пишу прямо на форуме, код, разумеется, не проверял!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.04.2012, 09:57   #4
erzhik_s
Новичок
Джуниор
 
Регистрация: 04.11.2008
Сообщений: 2
По умолчанию

IvaD, спасибо!
Программирование - как и любовь - одно слово, за которым скрывается бесконечное множество занятий.
erzhik_s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить из файла все строки содержащие 3 и 5 hon Общие вопросы Delphi 9 21.03.2012 21:55
Найти похожие строки в матрице. C# ~Annie~ C# (си шарп) 7 11.11.2010 17:19
Как найти абсолютно одинаковые строчки и удалить их, и объединить очень похожие? dronkailp Microsoft Office Excel 4 28.10.2009 16:59
Похожие строки матрицы Kolianno Общие вопросы C/C++ 1 01.06.2009 19:10
удалить похожие строки ZORRO2005 Microsoft Office Excel 0 28.11.2006 22:03