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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2019, 17:01   #1
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию удалить дубликаты повторяющие слова из memo

всем драсти как можно удалить повторяющие слова из memo? ношел вот такой кодик

Код:
procedure TForm8.BitBtn1Click(Sender: TObject);
begin
memo2.Text:=Memo1.Lines.Text;
i:=0;
while i < Memo2.Lines.Count do
begin
if Memo2.Lines.IndexOf(Memo2.Lines[i]) < i then
Memo2.Lines.Delete(i)
else
inc(i);
end;
вроде бы работает удаляет повторяющие слова но при большом объеме пример в мемо 30 000 строк иногда больше просто тормозит программа не отвечает =( можно ли как нибудь исправить ?
falsebegin вне форума Ответить с цитированием
Старый 30.07.2019, 17:14   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от falsebegin Посмотреть сообщение
всем драсти как можно удалить повторяющие слова из memo?
И Вам здравствовать!
Каждое слово на отдельной строке?
Слова с разным регистром букв так, Так, ТАК, тАк, ТаК - это всё разные слова?


Цитата:
Сообщение от falsebegin Посмотреть сообщение
роде бы работает удаляет повторяющие слова но при большом объеме пример в мемо 30 000 строк иногда больше просто тормозит программа не отвечает
так не надо использовать ВИЗУАЛЬНЫЙ компонент Memo вместо него - используйте TStringList
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.07.2019, 17:42   #3
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

да слова с разным регистром а как использовать TStringList ? может поделишься кодом?
falsebegin вне форума Ответить с цитированием
Старый 30.07.2019, 21:40   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Без учёта регистра
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  I: Integer;
begin
  SL := TStringList.Create;
  SL.Text := Memo1.Text;
  I := 0;
  while I < SL.Count do
  begin
    if SL.IndexOf(SL.Strings[I]) < I then SL.Delete(I)
  else Inc(I);
  end;
  ShowMessage(SL.Text); // Результат
  FreeAndNil(SL);
end;
Shouldercannon вне форума Ответить с цитированием
Старый 30.07.2019, 21:58   #5
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

добавил 30 000 строк в мемо программа серавно не отвечает
falsebegin вне форума Ответить с цитированием
Старый 31.07.2019, 01:56   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от falsebegin Посмотреть сообщение
при большом объеме пример в мемо 30 000 строк иногда больше просто тормозит программа не отвечает =( можно ли как нибудь исправить ?
Можно. Вставьте в цикл волшебную процедуру Application.ProcessMessages например так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  I: Integer;
begin
  SL := TStringList.Create;
  SL.Text := Memo1.Text;
  I := 0;
  while I < SL.Count do
  begin
    if SL.IndexOf(SL.Strings[I]) < I then SL.Delete(I)
  else Inc(I);
  if (i mod 300) = 0 then Application.ProcessMessages;
  end;
  ShowMessage(SL.Text); // Результат
  FreeAndNil(SL);
end;
Но мне кажется что что-то вы темните/ о чем-то умалчиваете.
Код Shouldercannon при всего-то 30 000 строк должен выполняться за такое время, что вы и глазом моргнуть не успеете.
Ну правда уважаемый Shouldercannon не вставил в свой код возврат результата в Мемо
northener вне форума Ответить с цитированием
Старый 31.07.2019, 02:18   #7
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

ставил проверил программа вроде не тормозит а думает и удаляет повторы очень долго и в место ShowMessage(SL.Text); ставил так memo2.lines.add(SL.Text);
falsebegin вне форума Ответить с цитированием
Старый 31.07.2019, 02:32   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от falsebegin Посмотреть сообщение
ставил проверил программа вроде не тормозит а думает и удаляет повторы очень долго и в место ShowMessage(SL.Text); ставил так memo2.lines.add(SL.Text);
Ну тогда попробуйте мой вариант. И сообщите результат.
northener вне форума Ответить с цитированием
Старый 31.07.2019, 02:35   #9
falsebegin
Форумчанин
 
Регистрация: 23.11.2016
Сообщений: 100
По умолчанию

ну так ставил и твой вот пример из 30 000 строк бывает 1000 дубликат или 5000 пытаясь удалить эти дубликаты программа думает так долго

Последний раз редактировалось falsebegin; 31.07.2019 в 02:38.
falsebegin вне форума Ответить с цитированием
Старый 31.07.2019, 02:56   #10
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Чушь!
Приведите код проекта.
northener вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить дубликаты и посчитать их сумму Pluselectro Microsoft Office Excel 4 10.02.2017 17:02
.Net 3 Как удалить дубликаты строки? CloudStrife C# (си шарп) 6 26.12.2015 13:42
Удалить из memo текст начиная от начального слова ,до конечного snakes Общие вопросы Delphi 5 02.11.2013 18:46
Удалить дубликаты строк Tronix Общие вопросы Delphi 24 07.10.2013 06:49
удалить дубликаты в stringlist yuran111 Общие вопросы Delphi 3 29.04.2011 18:24