Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.06.2010, 11:22
Klo Klo вне форума
Прохожий
 
Регистрация: 09.06.2010
Сообщения: 10
Репутация: 10
По умолчанию Сравнение StringList

Допустим есть 2 TStringsList. В первом текст такой: "Олег, Андрей, Владимир", а во втором:"Олег, Андрей, Владимир, Сергей". Так вот, как эти 2 StringList сравнить и записать разницу в 3 StringList. Чтобы в нем было: "Сергей".
Ответить с цитированием
  #2  
Старый 09.06.2010, 20:19
Klo Klo вне форума
Прохожий
 
Регистрация: 09.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

видимо никто не знает(
Ответить с цитированием
  #3  
Старый 09.06.2010, 21:34
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

1. Общим циклом перебираем StringList1
2.
Код:
StringList2.IndexOf(StringList1[index]);
- если не найдено - добавляем (SL3.Add...)
3. Повторяем всё точно так же для SL2...

Это в случае, если по одному имени на строку.
Если они через запятую, или ещё как - гугол, как ни странно, работает, ищи "Разделение текста StringList Delphi"
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #4  
Старый 10.06.2010, 10:26
Klo Klo вне форума
Прохожий
 
Регистрация: 09.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Код:
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 do
я верно иду?
p.s. до этого не работал с StringList(( Я немного не понял StringList2.IndexOf(StringList1[index]);
Ответить с цитированием
  #5  
Старый 10.06.2010, 15:11
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Пока что всё верно, только в последней строчке
Код:
for I := 0 to second.Count - 1 do
Delphi TStringList IndexOf, на первой же странице есть ссылка на ответ. Если не силён в английском - есть на русском, чуть дальше.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 10.06.2010, 19:48
Klo Klo вне форума
Прохожий
 
Регистрация: 09.06.2010
Сообщения: 10
Репутация: 10
По умолчанию

Код:
for I := 0 to second.Count-1 do
if not first.IndexOf(second[i])=second.IndexOf(first[i]) then
third.Add(second[i]);
но выдает исключение(( Мне получается нужно так, чтобы если во второй лист добавились новые имена - эти имена отобразить в 3 листе(

Последний раз редактировалось Klo, 10.06.2010 в 19:51.
Ответить с цитированием
  #7  
Старый 10.06.2010, 20:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,718
Репутация: 52347
По умолчанию

В Third вам надо добавлять разницу между элементами, а вы просто копируете элемент из Second.
Но даже и так, все равно неправильно будет работать, т.к. вы находите элемент которого нет в списке, а у вас задача найти похожий частично элемент и разницу добавить в новый список.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 10.06.2010 в 20:18.
Ответить с цитированием
  #8  
Старый 10.06.2010, 22:03
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Код:
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]);
Как-то так, не уверен про правильность вызова IndexOf, но я направил тебя в нужную сторону.
С тебя +.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #9  
Старый 10.06.2010, 22:21
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,903
Репутация: выкл
По умолчанию

Klo, вы уж меня извините, но сравнивать строки в вашем контексте - довольно нетривиальная задача (я бы написал процедуру, но потратил бы на нее несколько месяцев и запросил 4-х значную сумму в еврах).
Переставте задачу, или, если задача не переставляется - измените подход. Иначе - см. выше.
ЗЫЖ Феникс как всегда гонит пургу
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #10  
Старый 10.06.2010, 22:23
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Аристарх, обоснуй
Дело упирается в сравнение двух списков...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #11  
Старый 10.06.2010, 22:28
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,903
Репутация: выкл
По умолчанию

А что и с чем ты сравнил? Ты уровнял списки - круто, но не то что нужно.
ЗЫЖ Я редко (почти никогда) ошибаюсь, не нужно меня проверять.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #12  
Старый 10.06.2010, 22:33
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Присмотрись к коду. Я перебираю список А, и, если чего-то не нахожу из этого списка в списке Б, добавляю это "что-то" в список В. После чего повторяю то же самое для списка Б к списку А.
В каком месте я их уравниваю? В списке В получается разница между списками А и Б. Не это ли нужно?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #13  
Старый 10.06.2010, 22:40
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,903
Репутация: выкл
По умолчанию

ну... не считая того что это все будет падать.. ты наверное (бугагашечки) прав...
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #14  
Старый 10.06.2010, 22:41
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Санкт-Петербург
Сообщения: 2,903
Репутация: выкл
По умолчанию

Как я сказал уже - сравнение строк - нетривиальная задача.
Тут иногда (а лучше всегда это делать) думать надо......
ЗЫЖ (многоточие означает - задумайтесь)
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #15  
Старый 10.06.2010, 22:46
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

То, что это будет падать, это гемор уже не мой. Мне сказали - "засунуть разницу списков А и Б в список В" - я написал пример. Остальное не моя забота.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram