Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi] Вопрос на засыпку #3 (https://forum.antichat.xyz/showthread.php?t=203308)

RedFern.89 11.05.2010 20:11

[Delphi] Вопрос на засыпку #3
 
есть Memo примероного содержания:

Код:

Mygarin - Signs of Existence
 mygrain - W.T.F.
 Mygarin - Signs of Existence
 MyGrain - Killing Time
MyGrain - W.T.F.
 MyGrain - W.T.F.

желтым отмеченны повторяющиеся строчки, подлежащие удалению.

вопрос! как удалить все одинаковые строчки, оставляя только одну копию? Получится должно типа того:

Код:

Mygarin - Signs of Existence
 mygrain - W.T.F.
 MyGrain - Killing Time

всем заранее спасибо. Извините за такое ламерство.

intNet 11.05.2010 20:16

ппц. гугл - не?
самое простое - через промежуточный TSTringList(есть свойство Duplicates, которому присвоиваешь dupIgnore).

RedFern.89 11.05.2010 20:17

блин.. у мну моги щас кипят.. ктонить подкинет код?

intNet 11.05.2010 20:19

Код:

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;


RedFern.89 11.05.2010 20:20

спасибо! а без сортировки можно какнить обойтись?

Jaw 11.05.2010 20:21

Код:

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;


intNet 11.05.2010 20:22

Сортировка не нужна, можешь её убрать.

RedFern.89 11.05.2010 20:23

всем спасибо! вопрос закрыт..

Dizz 11.05.2010 20:26

Jaw, при большом кол-ве строк этот код оч. долго будет удалять дубли

Jaw 11.05.2010 20:46

Dizz, к сожелению или к счастью ты был прав мой код справился с файлом в ~5k строк за 2 минуты, код intNet за считаные милесекунды.


Время: 00:54