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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.03.2013, 11:33
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию listbox-поиск и замена предложений

Привет друзья. У меня вопрос помогите пожалуйста решить небольшую задачку. Есть три listbox'a. В первом listbox'e находиться некий список слов. Во втором listbox'e находится список слов которые надо найти в первом listbox'e, в третьем listbox'e находиться список слов на которые надо заменить найденные слова в первом listbox'e. Т.е к примеру в первом listbox'e примерно такой список:
abc
dfg
hello
hi
welcome

во втором listbox'e такой:
hello
welcome

в третьем listbox'e:
Привет
добро пожаловать

Соответственно в конечном итоге в listbox1 вместо hello должно встать привет, а вместо welcom добро пожаловать.
Похожую задачу один раз уже решали, но тогда вместо listbox был ричэдит. А у ричэдит в отличии от listbox есть свойство findtext. Заранее благодарен за помощь
Ответить с цитированием
  #2  
Старый 28.03.2013, 12:46
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
ListBox1.Items.IndexOf()
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 28.03.2013, 13:17
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию =)

Код:
var
  i: Integer;
  FindWord: string;
  pos: Integer;
begin
  RichEdit1.Lines.BeginUpdate;
  try
    for i := 0 to RichEdit2.Lines.Count - 1 do
    begin
      FindWord := RichEdit2.Lines[i];
      pos := 0;
      while True do
      begin
        pos := RichEdit1.FindText(FindWord, pos, Length(RichEdit1.Text) - pos, []);
        if pos < 0 then Break;
        RichEdit1.SelStart := pos;
        RichEdit1.SelLength := Length(FindWord);
        RichEdit1.SelText := RichEdit3.Lines[i];
        Inc(pos);
      end;
    end;
  finally
    RichEdit1.Lines.EndUpdate;
  end;
end;
Вот тот самый код по ричу. Т.е в данном случае можно заменить все ричы на листбокс, и вместо
Код:
pos := RichEdit1.FindText(FindWord, pos, Length(RichEdit1.Text) - pos, []);
Поставить
Код:
 pos := listbox1.items.index0f(параметры) - pos, []);
заранее извиняюсь за то что туплю
Ответить с цитированием
  #4  
Старый 28.03.2013, 14:00
Аватар для borockov
borockov borockov вне форума
Начинающий
 
Регистрация: 18.08.2012
Сообщения: 125
Репутация: 10
По умолчанию =)

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s1,s2,s3:string;
begin
s1 := lb1.Items.Text;
for i := 0 to lb1.Items.Count - 1 do begin
  s2 := lb2.Items[i];
  s3 := lb3.Items[i];
  s1 := StringReplace(s1, s2, s3, [rfReplaceAll, rfIgnoreCase]);
end;
lb1.Items.Text := s1;
end;
А как то так? Но вылетает ошибка "list index out of bounds(2)"
Ответить с цитированием
  #5  
Старый 28.03.2013, 15:04
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

не во всех списках количество элементов одинаково, где-то больше, где-то меньше.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 28.03.2013, 17:42
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Используй два вложенных цикла:
внешний берёт слово1 из первого списка,
внутренний сравнивает слово1 со всеми словами из второго списка.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter