![]() |
|
#1
|
|||
|
|||
![]() Помогите решить задачу. Вот пока до чего додумался.
Код:
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
|
|||
|
|||
![]() Код:
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
|
|||
|
|||
![]() Вот пока до чего додумался
Код:
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
|
||||
|
||||
![]() Ну наверно в вашем случае надо проверить, есть ли до и после слова пробелы...
Код:
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
|
|||
|
|||
![]() Ну если вот так
Код:
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
|
|||
|
|||
![]() вот написал. Даже номер строки определяет, если слово есть. Не получается номер слова. Помогите
Код:
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. |