Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Повторяющиеся строки   Найти похожие ветки 

 
Nianechka   (2010-02-19 22:53) [0]

Приветствую.
У меня есть два мемо.
Как можно найти в них все одинаковые строчки и добавить эти строчки в 3й мемо?

for i:=0 to Memo1.Lines.Count-1 do  
for j:=0 to Memo2.Lines.Count-1 do  
if  Memo1.Lines.String[i]= Memo2.Lines.String[j] then
Memo3.Lines.Add(Memo1.Lines.String[i]);

Таким обрахом, у меня выходит список совпадающих строчек, но так как сравнивается элемент первый со вторым, а потом второй с первым и так далее, выходит что эти строчки идут несколько раз.
Удалить уже найденную строчку не могу, так как тогда сбивается порядок, и вылетает ошибка, если ее игнорировать, начинает удалять все строчки подряд.

Подскажите как сделать правильно.


 
Германн ©   (2010-02-19 23:54) [1]


> Удалить уже найденную строчку не могу, так как тогда сбивается
> порядок, и вылетает ошибка

Используй цикл for downto. Ошибки не будет.


 
Германн ©   (2010-02-20 01:46) [2]


> Как можно найти в них все одинаковые строчки и добавить
> эти строчки в 3й мемо?

Если "дубликаты" не нужны, то можно оставить только один цикл. А сравнение заменить на IndexOf.


 
Игорь Шевченко ©   (2010-02-20 01:46) [3]

for I:=0 to Memo1.Lines.Count-1 do  
 if (Memo2.Lines.IndexOf(Memo1.Lines[I]) <> -1) and
   (Memo3.Lines.IndexOf(Memo1.Lines[I]) = -1) then
   Memo3.Lines.Add(Memo1.Lines[I]);


небыстрый способ


 
Германн ©   (2010-02-20 01:54) [4]


> небыстрый способ
>

Да, пожалуй.
Но "быстрость" зависит в большей степени от задачи. А она не озвучена.


 
Deltas ©   (2010-02-20 03:13) [5]

Для повышения эффективности строки текстовой области лучше временно переписать в сортированный список класса TStringList и выполнять бинарный поиск с помощью метода TStringList.Find().


 
oldman ©   (2010-02-20 08:39) [6]


> Таким обрахом, у меня выходит список совпадающих строчек,
>  но так как сравнивается элемент первый со вторым, а потом
> второй с первым и так далее, выходит что эти строчки идут
> несколько раз.
> Удалить уже найденную строчку не могу, так как тогда сбивается
> порядок, и вылетает ошибка, если ее игнорировать, начинает
> удалять все строчки подряд.


Перед добавлением проверь наличие строчки в мемо3
:)
лишний цикл, но ошибки не будет.


 
Leonid Troyanovsky ©   (2010-02-21 00:03) [7]


> Nianechka   (19.02.10 22:53)  


procedure TForm1.Button1Click(Sender: TObject);
var
 i: Longint;
begin
 with TStringList.Create do
   try
     Sorted := True;
     Duplicates := dupError;
     AddStrings(Memo1.Lines);
     for i := 0 to Memo2.Lines.Count-1 do
       try
         Add(Memo2.Lines[i]);
       except
         on E: EStringListError do
           Memo3.Lines.Add(Memo2.Lines[i]);
       end;
   finally
     Free;
   end;
end;

--
Regards, LVT.


 
Германн ©   (2010-02-21 02:18) [8]


> Leonid Troyanovsky ©   (21.02.10 00:03) [7]
>  

Мне сей вариант понравился.
Хотя задачи мы так и не услышали, а автор сабжа до сих пор не появился тут повторно.


 
Игорь Шевченко ©   (2010-02-21 03:00) [9]

Leonid Troyanovsky ©   (21.02.10 00:03) [7]

Я вроде уже статью Gunsmoker-а про Exceptions с Королевства приводил ? :)

Обработка Exceptions занятие а) небыстрое б) неясное


 
Германн ©   (2010-02-21 03:13) [10]


> Игорь Шевченко ©   (21.02.10 03:00) [9]
>
> Leonid Troyanovsky ©   (21.02.10 00:03) [7]
>
> Я вроде уже статью Gunsmoker-а про Exceptions с Королевства
> приводил ? :)
>

Так и Леонид недавно приводил ссылку на обсуждение Exception. Вы уж разберитесь, если сможете. :) Нам будет полезно.


 
Anatoly Podgoretsky ©   (2010-02-21 11:39) [11]

> Германн  (21.02.2010 03:13:10)  [10]

А чего разбираться, оба ссылку приводили.


 
Nianechka   (2010-02-21 11:54) [12]

Всем большое спасибо, помогли.


 
KilkennyCat ©   (2010-02-21 12:27) [13]


> Deltas ©   (20.02.10 03:13) [5]
>
> Для повышения эффективности строки текстовой области лучше
> временно переписать в сортированный список класса TStringList
> и выполнять бинарный поиск с помощью метода TStringList.
> Find().


Поиск лишний, но ход мыслей верный.
Свойство дубликатности спасет.
если только сортировка не противоречит ТЗ.


 
Leonid Troyanovsky ©   (2010-02-22 14:16) [14]


> Игорь Шевченко ©   (21.02.10 03:00) [9]

> Я вроде уже статью Gunsmoker-а про Exceptions с Королевства
> приводил ? :)

Мне она не очень показалась ни с первого взгляда,
ни после внимательного прочтения.

Конечно, материал обработан и обобщен большой,
и все такое прочее (респект автору), но,
для начинающих статья тяжела и содержит
дидактические ошибки, а, как минимум, для меня
не содержит каких-либо откровений.

С большим любопытством почитал бы Реймонда Чена, то,
что он обещал критиковать после исключений в критсекциях.

--
Regards, LVT.


 
Игорь Шевченко ©   (2010-02-22 15:23) [15]

Leonid Troyanovsky ©   (22.02.10 14:16) [14]


> С большим любопытством почитал бы Реймонда Чена, то,
> что он обещал критиковать после исключений в критсекциях.
>


Это всегда пожалуйста :)

http://transl-gunsmoker.blogspot.com/2010/02/blog-post_11.html


 
Leonid Troyanovsky ©   (2010-02-22 15:36) [16]


> Игорь Шевченко ©   (22.02.10 15:23) [15]

> http://transl-gunsmoker.blogspot.com/2010/02/blog-post_11. html

Вот это, в отличии от, дейс-но, чище, легче и проще опознать :)

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.114 c
2-1269648248
HF-Trade
2010-03-27 03:04
2010.08.27
IDHttp.Post Проблема с залогиниванием


2-1267733813
mops
2010-03-04 23:16
2010.08.27
сортировка по типам


6-1217926149
dima_tepl
2008-08-05 12:49
2010.08.27
Работа с микроконтроллером по TCP/IP протоколу


15-1271942767
Mozart
2010-04-22 17:26
2010.08.27
построение октаэдра


15-1275368289
user123
2010-06-01 08:58
2010.08.27
Два интересующих меня вопроса о копировании и видеопотоке