Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.077 c
4-1233845602
niro
2009-02-05 17:53
2010.08.27
Эмулирование действий пользователя в MSIE


15-1268602203
Юрий
2010-03-15 00:30
2010.08.27
С днем рождения ! 15 марта 2010 понедельник


15-1275371179
Дмитрий С
2010-06-01 09:46
2010.08.27
Знатокам MS ISA server 2006. Настройка Publish Web Sites


2-1275564908
Б
2010-06-03 15:35
2010.08.27
Как узнать физические размеры монитора?


15-1273350599
Юрий
2010-05-09 00:29
2010.08.27
С днем рождения ! 9 мая 2010 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский