Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2011, 17:04   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию Найти в TStringList

Как найти в TStringList какое-либо слово и выполнить подсчёт найденных слов?
Shouldercannon вне форума Ответить с цитированием
Старый 18.04.2011, 21:44   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

банальный Pos() в цикле
или метод IndexOf
или метод Find
смотря какие условия и что надо найти..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2011, 22:58   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Искать исключительно текст, одно слово, не фразы и не словосочетания.
Shouldercannon вне форума Ответить с цитированием
Старый 19.04.2011, 00:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Очень похожая тема http://programmersforum.ru/showthrea...532#post781532
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.04.2011, 00:43   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Как найти в TStringList какое-либо слово и выполнить подсчёт найденных слов?
банально так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  cLetter = ' 1 ';
var
  LetCount: Integer;
  s: string;
begin
  s := Memo1.Text;
  LetCount := 0;
  while not (Pos(cLetter, s) = 0) do
  begin
    if Pos(cLetter, s) > 0 then
    begin
      Inc(LetCount);
      Delete(s, Pos(cLetter, s), Length(cLetter)-1);
    end;
  end;
  Memo1.Text:=s;
  ShowMessage(IntToStr(LetCount));
end;
при условии что слово с двух сторон пробито пробелами:
Код:
 1 1 1 1
Человек_Борща вне форума Ответить с цитированием
Старый 19.04.2011, 13:56   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Код:
procedure TForm1.BLoadClick(Sender: TObject);
begin
  qqq.LoadFromFile('test.txt');
end;

procedure TForm1.BSearchClick(Sender: TObject);
var
  i, i2: Integer;
begin
  for i := qqq.Count - 1 downto 0 do
  if Edit1.Text = trim(qqq[i]) then
  begin
    qqq.Delete(i); // Замена текста, а не удаление
    i2 := i2 + 1;
  end;

  if i2 = 0 then MessageBox(0, 'Текст не найден', 'Project1', MB_ICONInformation) else MessageBox(0, Pchar('Текст найден [' + IntToStr(i2) + ']'), 'Project1', MB_ICONInformation);
end;
Не додумаюсь как вместо удаления сделать замену в помеченном месте.

Последний раз редактировалось Shouldercannon; 19.04.2011 в 13:58.
Shouldercannon вне форума Ответить с цитированием
Старый 19.04.2011, 14:29   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
qqq.Strings[i]:='Новый текст';
и не qqq[i] а qqq.Strings[i]
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.04.2011, 16:41   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Очень просто, пусть SL это твой TStringList, тогда
Код:
var
i, j : integer;
s   : string;
begin
  s := 'Искомое слово';
  j := 0;
  for i:=0 to sl.count - 1 do
    begin
      while pos (s, sl.Strings[i])<>0 do
        begin
          inc(j);
          Delete (sl.Strings[i], 1, pos (s, sl.Strings[i]));
        end;
    end;
  ShowMessage ('Слово ' + '"' + s + '"' + ' надено ' + IntToStr(j) + ' раз.');
end;
КОнечно нужно сначала sl инициализировать, забить его текстом и потом освободить память, но это наверно сами сможете.
З.Ы. могут быть маленькие ошибки. Пишу в блокноте без компилятора


Замену поможет сделать функция StringReplace

Последний раз редактировалось FaTaL; 19.04.2011 в 16:50.
FaTaL вне форума Ответить с цитированием
Старый 19.04.2011, 21:59   #9
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
qqq.Strings[i]:='Новый текст';
и не qqq[i] а qqq.Strings[i]
Strings[] - свойство по умолчанию.
Учи матчасть и впредь не вставляй свои дилетантские комментарии.
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TStringList vasyaRyzhyi Общие вопросы Delphi 0 07.03.2011 11:01
TStringList adr Общие вопросы Delphi 0 05.11.2010 18:29
TStringList nimf Общие вопросы Delphi 5 15.11.2007 14:44
Помогите пожалуйста найти и заменить слово в TStringList Aleno4ka Помощь студентам 3 24.02.2007 14:45