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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.02.2011, 02:50
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию Здадача

Помогите решить задачу. Вот пока до чего додумался.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i:= 0 to memo1.Lines.Count do
if edit1.Text = memo1.Lines[i] then
begin
MessageDlg('Это слово уже есть в тексте Memo!',mtInformation,[mbOk],0);
Exit; // выход из процедуры обработки события
end;
Memo1.Lines.Add(edit1.Text);
end;  
А вот сама задача
В редактор Memo исходно вводится текст из нескольких строк. В отдельное окно вводится слово. Программа определяет, есть ли это слово в тексте. При положительном исходе на метку выводится номер строки и номер слова. При отсутствии слово добавляется в конец текста в редакторе. Линейка прокрутки задает минимальное количество строк в редакторе. Запуск анализа - кнопка.
Ответить с цитированием
  #2  
Старый 18.02.2011, 04:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
if Pos(Edit1.Text,Memo1.Lines.text) > 0 Then
  Begin
    Memo1.SelStart := Pos(Edit1.Text,Memo1.Lines.text);
    Memo1.selLength := 0;
  End
Else
  Begin 
     Memo1.Lines.Add(edit1.Text);
  End;
Ответить с цитированием
  #3  
Старый 18.02.2011, 22:50
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

Вот пока до чего додумался

Код:
procedure TForm1.Button1Click(Sender: TObject);
var // Объявляем переменные
Find:string; // Искомая строка
begin
find:=Edit1.Text; // Записываем в find текст из Edit
    If Pos(FIND, Memo1.Lines.Text)<>0
      Then
        Begin
          ShowMessage('Такое слово есть');
          Memo1.SetFocus();
          Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
          Memo1.SelLength:=Length(FIND);
        End
    else
    Begin
      Memo1.Lines.Add(edit1.Text);
    end;
end;

Вроде как бы работает, но если например в Memo ввести вот такой текст "Я болею за спартак" а в edit ввести слово "спарта" то программа выдаст сообщение что такое слово есть. Как это исправить помогите!!!!!
Ответить с цитированием
  #4  
Старый 18.02.2011, 23:00
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну наверно в вашем случае надо проверить, есть ли до и после слова пробелы...
Код:
var b: Integer;
...
  b :=  Pos(FIND, Memo1.Lines.Text);
  If(b<>0) and (Memo1.Lines.Text[b-1] <> ' ') and (Memo1.Lines.Text[b+Length(FIND)] <> ' ') then
...
Правда в примере возможен выход за пределы.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 19.02.2011, 00:33
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

Ну если вот так

Код:
procedure TForm1.Button1Click(Sender: TObject);
var // Объявляем переменные
Find:string; // Искомая строка
b: integer;
begin
find:=Edit1.Text; // Записываем в find текст из Edit
b :=  Pos(FIND, Memo1.Lines.Text);
    If(b<>0) and (Memo1.Lines.Text[b-1] <> ' ') and (Memo1.Lines.Text[b+Length(FIND)] <> ' ')
      Then
        Begin
          ShowMessage('Такое слово есть');
          Memo1.SetFocus();
          Memo1.SelStart:=Pos(FIND,Memo1.Lines.Text)-1;
          Memo1.SelLength:=Length(FIND);
        End
    else
    Begin
      Memo1.Lines.Add(edit1.Text);
    end;
end;

то сейчас получается, что когда я ввожу в Memo текст "Я болею за спартак" а в edit ввести слово "спарта" то да программа добавляет его в конец текста в редакторе как и положено по заданию. Ну а если в edit ввести слово "спартак" то программа даже и не выдает сообщение, что это слово есть в Memo добавляет его в конец редактора. Помогите это исправить
Ответить с цитированием
  #6  
Старый 22.02.2011, 02:17
StudentMarat StudentMarat вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 38
Репутация: 156
По умолчанию

вот написал. Даже номер строки определяет, если слово есть. Не получается номер слова. Помогите

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
PosIndex: Integer;

function SpacedWord(const A: string): string;
begin
Result :=Trim(A) + ' ';
end;
begin
PosIndex := Pos(SpacedWord(Edit1.Text), SpacedWord(Memo1.Lines.Text)) - 1;
if PosIndex >= 0 then
begin
ShowMessage('Такое слово есть');
label3.Caption:='Номер строки ' + IntToStr(memo1.CaretPos.y);
Memo1.SetFocus;
Memo1.SelStart := PosIndex;
Memo1.SelLength := Length(Edit1.Text);
end
else
Memo1.Lines.Add(Edit1.Text);
end; 

Последний раз редактировалось StudentMarat, 22.02.2011 в 02:24.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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