![]() |
|
|
|
|
#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. |