есть Memo примероного содержания: Code: Mygarin - Signs of Existence mygrain - W.T.F. [color=yellow]Mygarin - Signs of Existence[/color] MyGrain - Killing Time [color=yellow] MyGrain - W.T.F. MyGrain - W.T.F.[/color] желтым отмеченны повторяющиеся строчки, подлежащие удалению. вопрос! как удалить все одинаковые строчки, оставляя только одну копию? Получится должно типа того: Code: Mygarin - Signs of Existence mygrain - W.T.F. MyGrain - Killing Time всем заранее спасибо. Извините за такое ламерство.
ппц. гугл - не? самое простое - через промежуточный TSTringList(есть свойство Duplicates, которому присвоиваешь dupIgnore).
Code: procedure TForm1.Button1Click(Sender: TObject); begin With TStringList.Create() do begin Duplicates := dupIgnore; Sorted := True; AddStrings(Memo1.Lines); Memo1.Clear(); Memo1.Text := Text; Free(); end; end;
Code: var i:integer; begin i:=0; while i < form1.Memo1.Lines.Count do begin if form1.Memo1.Lines.IndexOf(form1.Memo1.Lines[i]) < i then form1.Memo1.Lines.Delete(i) else inc(i); end; end;
Dizz, к сожелению или к счастью ты был прав мой код справился с файлом в ~5k строк за 2 минуты, код intNet за считаные милесекунды.
можно еще так: засовываешь текст мемо в стринглист, сортируешь его. далее - сравниваешь первую строку со второй, и если они совпадают - удаляешь вторую. если не совпадают - сравниваешь вторую с третьей. и т.д. довольно шустрый метод, чесслово
Быстрее делать так, читаем из Memo.Lines.Strings, делаем двойной цикл(проверка текущего со всеми) при этом пишем в другой TStringList, потом Assign в Memo. Скорость обработки будет обратно пропорциональна прогрессу обработки + копирование данных.
~5k не показатель попробуйте для интереса 5 миллионов хотябы и этот код должен умереть в плане скорости
а можно еще так взять двоичное дерево поиска вствлять в него строки после вставки оно уже не содержит дубли а за счет дерева и двоичного поиска обработает как минимум 5 миллионов очень быстро про какие то ~5k и говорить не стоит