Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
[Delphi] Вопрос на засыпку #3 |

11.05.2010, 20:11
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
[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
всем заранее спасибо. Извините за такое ламерство.
Последний раз редактировалось RedFern.89; 11.05.2010 в 20:13..
|
|
|

11.05.2010, 20:16
|
|
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме: 1271980
Репутация:
19
|
|
ппц. гугл - не?
самое простое - через промежуточный TSTringList(есть свойство Duplicates, которому присвоиваешь dupIgnore).
|
|
|

11.05.2010, 20:17
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
блин.. у мну моги щас кипят.. ктонить подкинет код?
|
|
|

11.05.2010, 20:19
|
|
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме: 1271980
Репутация:
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;
|
|
|

11.05.2010, 20:20
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
спасибо! а без сортировки можно какнить обойтись?
|
|
|

11.05.2010, 20:21
|
|
Новичок
Регистрация: 12.04.2010
Сообщений: 4
Провел на форуме: 47699
Репутация:
1
|
|
Код:
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;
|
|
|

11.05.2010, 20:22
|
|
Познающий
Регистрация: 31.05.2009
Сообщений: 68
Провел на форуме: 1271980
Репутация:
19
|
|
Сортировка не нужна, можешь её убрать.
|
|
|

11.05.2010, 20:23
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
всем спасибо! вопрос закрыт..
|
|
|

11.05.2010, 20:26
|
|
Новичок
Регистрация: 09.05.2010
Сообщений: 1
Провел на форуме: 4520
Репутация:
0
|
|
Jaw, при большом кол-ве строк этот код оч. долго будет удалять дубли
|
|
|

11.05.2010, 20:46
|
|
Новичок
Регистрация: 12.04.2010
Сообщений: 4
Провел на форуме: 47699
Репутация:
1
|
|
Dizz, к сожелению или к счастью ты был прав мой код справился с файлом в ~5k строк за 2 минуты, код intNet за считаные милесекунды.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|