![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Допустим есть 2 TStringsList. В первом текст такой: "Олег, Андрей, Владимир", а во втором:"Олег, Андрей, Владимир, Сергей". Так вот, как эти 2 StringList сравнить и записать разницу в 3 StringList. Чтобы в нем было: "Сергей".
|
|
#2
|
|||
|
|||
|
видимо никто не знает(
|
|
#3
|
||||
|
||||
|
1. Общим циклом перебираем StringList1
2. Код:
StringList2.IndexOf(StringList1[index]); 3. Повторяем всё точно так же для SL2... Это в случае, если по одному имени на строку. Если они через запятую, или ещё как - гугол, как ни странно, работает, ищи "Разделение текста StringList Delphi" |
|
#4
|
|||
|
|||
|
Код:
var
first, second, third:TStringList;
i,k:integer;
begin
first:=TStringList.Create;
second:=TstringList.Create;
third:=TstringList.Create;
first.Add('Oleg'); first.Add('Vladimir'); first.Add('Andrey');
second.Add('Oleg'); second.Add('Vladimir'); second.Add('Andrey'); second.Add('Sergey');
Memo1.Lines:=first;
Memo2.Lines:=second;
for I := 0 to second.Count dop.s. до этого не работал с StringList(( Я немного не понял StringList2.IndexOf(StringList1[index]); |
|
#5
|
||||
|
||||
|
Пока что всё верно, только в последней строчке
Код:
for I := 0 to second.Count - 1 do |
|
#6
|
|||
|
|||
|
Код:
for I := 0 to second.Count-1 do if not first.IndexOf(second[i])=second.IndexOf(first[i]) then third.Add(second[i]); Последний раз редактировалось Klo, 10.06.2010 в 19:51. |
|
#7
|
||||
|
||||
|
В Third вам надо добавлять разницу между элементами, а вы просто копируете элемент из Second.
Но даже и так, все равно неправильно будет работать, т.к. вы находите элемент которого нет в списке, а у вас задача найти похожий частично элемент и разницу добавить в новый список. Последний раз редактировалось Страдалецъ, 10.06.2010 в 20:18. |
|
#8
|
||||
|
||||
|
Код:
for I := 0 to first.Count-1 do if second.IndexOf(first[i])<0 then third.Add(first[i]); for I := 0 to second.Count-1 do if first.IndexOf(second[i])<0 then third.Add(second[i]); С тебя +. |
|
#9
|
||||
|
||||
|
Klo, вы уж меня извините, но сравнивать строки в вашем контексте - довольно нетривиальная задача (я бы написал процедуру, но потратил бы на нее несколько месяцев и запросил 4-х значную сумму в еврах).
Переставте задачу, или, если задача не переставляется - измените подход. Иначе - см. выше. ЗЫЖ Феникс как всегда гонит пургу ![]() |
|
#10
|
||||
|
||||
|
Аристарх, обоснуй
![]() Дело упирается в сравнение двух списков... |
|
#11
|
||||
|
||||
|
А что и с чем ты сравнил? Ты уровнял списки - круто, но не то что нужно.
ЗЫЖ Я редко (почти никогда) ошибаюсь, не нужно меня проверять. ![]() |
|
#12
|
||||
|
||||
|
Присмотрись к коду. Я перебираю список А, и, если чего-то не нахожу из этого списка в списке Б, добавляю это "что-то" в список В. После чего повторяю то же самое для списка Б к списку А.
В каком месте я их уравниваю? В списке В получается разница между списками А и Б. Не это ли нужно? |
|
#13
|
||||
|
||||
|
ну... не считая того что это все будет падать.. ты наверное (бугагашечки) прав...
|
|
#14
|
||||
|
||||
|
Как я сказал уже - сравнение строк - нетривиальная задача.
Тут иногда (а лучше всегда это делать) думать надо...... ЗЫЖ (многоточие означает - задумайтесь) |
|
#15
|
||||
|
||||
|
То, что это будет падать, это гемор уже не мой. Мне сказали - "засунуть разницу списков А и Б в список В" - я написал пример. Остальное не моя забота.
|