Форум: "Начинающим";
Текущий архив: 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.48 MB
Время: 0.082 c