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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 21:59   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Найти слова в переменной

1. Есть переменная s типа string. Её содержимое: Некое предложение, в котором встречается слово. Нужно найти это слово и совершить над ним действие.
2. Добавить в Memo этот же текст, но к выделенному жирным прибавить [] и должно получиться: Некое предложение, в котором встречается [слово]. Нужно найти это [слово] и совершить над ним действие.
Помогите, пожалуйста.
Shouldercannon вне форума Ответить с цитированием
Старый 30.01.2012, 22:01   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код:
function Pos(const SubStr, Str: ShortString): Integer;
не пробовали?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 30.01.2012, 22:07   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Пробовал. Нужно несколько раз пробежаться по s через while. Один интересный момент - нужно добавить в Memo часть текста до слово, потом само модифицированное слово [слово], потом то, что идёт после слово и так до тех пор, пока не закончится поиск.
Код:
if Pos('слово', s) <> 0 then ShowMessage('Найдено');

Последний раз редактировалось Shouldercannon; 30.01.2012 в 22:22.
Shouldercannon вне форума Ответить с цитированием
Старый 30.01.2012, 22:34   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Тогда вам лучше
Код:
function StringReplace(const S, OldPattern, NewPattern: string;
Flags: TReplaceFlags): string;
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 30.01.2012, 22:52   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Нельзя это делать. Я делаю вывод в RichView.
Код:
RichView.AddNL(часть текста до слово, 0, 0);
RichView.AddNL(слово, 1, -1);
RichView.AddNL(текст идущий после слово, 0, -1);
RichView.AddNL(слово, 1, -1);
RichView.AddNL(текст идущий после слово, 0, -1);
RichView.Format;
Задача - выделить из всего добавленного текст в RichView слово слово
Была идея:
Через while искать позицию, далее добавляем всё до слово, затем удаляем всё перед слово и добавялем само слово и так далее. Лписание фиговое, влт пример
Step 1. Некое предложение, в котором встречается
Step 2. слово
Step 3. . Нужно найти это
Step 4. слово
Step 5. и совершить над ним действие.
Как-то так.
Shouldercannon вне форума Ответить с цитированием
Старый 30.01.2012, 22:56   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вот примерчик с RichEdit
Код:
procedure TForm1.Button1Click(Sender: TObject);
var s1,s2: String;
    i,k: Integer;
    xPos: array of Integer;
begin
  s1:='Раз два. Два, три, раз. Два-два';
  s2:='два';
  RichEdit1.Clear;
  k:=0;
  while s1<>'' do begin
    i:=Pos(AnsiUpperCase(s2),AnsiUpperCase(s1));
    if i=0 then begin
      RichEdit1.Text:=RichEdit1.Text+s1;
      Break;
    end;
    RichEdit1.Text:=RichEdit1.Text+Copy(s1,1,i-1)+'['+Copy(s1,i,Length(s2))+']';
    Inc(k);
    SetLength(xPos,k);
    xPos[k-1]:=Length(RichEdit1.Text)-Length(s2)-2;
    s1:=Copy(s1,i+Length(s2),Length(s1)-i-Length(s2)+1);
  end;
  for i:=0 to k-1 do begin
    RichEdit1.SelStart:=xPos[i];
    RichEdit1.SelLength:=Length(s2)+2;
    RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style+[fsBold];
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.01.2012, 12:43   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Код:
  s := 'Некое предложение, в котором встречается слово. Нужно найти это слово и совершить над ним действие.';
  Memo1.Clear;

  while Pos(Edit1.Text, s) <> 0 do
  begin
    // Избегаем пустой строки в начале
    if (Copy(s, 1, Pos(Edit1.Text, s) - 1)) <> '' then Memo1.Lines.Add(Copy(s, 1, Pos(Edit1.Text, s) - 1)); // До СЛОВО
    Delete(s, 1, Pos(Edit1.Text, s) - 1);
    Memo1.Lines.Add(Copy(s, 1, Length(Edit1.Text))); // Само СЛОВО
    Delete(s, 1, Length(Edit1.Text));
    // После СЛОВО
    if not (Pos(Edit1.Text, s) <> 0) then
    begin
      Memo1.Lines.Add(s);
      Break;
    end;
  end;
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти слова палиндромы majesticx777 Паскаль, Turbo Pascal, PascalABC.NET 0 15.06.2011 13:36
найти слова в тексте boshki Помощь студентам 0 12.06.2011 12:15
Символьная строка содержит слова, разделенные пробелами. Найти все слова-палиндромы (Паскаль) sashunechka Помощь студентам 4 18.05.2011 21:45
Найти значение переменной y в зависимости от значения переменной х Rishi Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 11.05.2011 20:25
Даны два слова одинаковой длины. Присвоить переменной К число, равное количеству попарно одинаковых букв. dimon_home Паскаль, Turbo Pascal, PascalABC.NET 1 16.06.2009 08:31