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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2017, 10:15   #1
wany.iv
 
Регистрация: 25.09.2017
Сообщений: 5
Вопрос Функция работает не верно (проверка присутствия текста в Memo)

function TForm4.pptt2(a,s:integer;x:string): string;//определение присутствия слов в memo
begin
s:=0;
for a:=0 to Memo2.Lines.Count-1 do
begin
if AnsiPos(x, Memo2.Lines[i])>0
then
begin
s:=1;
end;

end;
if s=1 then
begin
Result:='да';
end;
if s=0 then
begin
Result:='нет';
end;

Переменная Х содержит текст, если текст содержится в memo выводит ДА и наоборот, функция не работает, помогите найти ошибку
wany.iv вне форума Ответить с цитированием
Старый 28.11.2017, 10:22   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

1. просто нет нужного слова.
2. нужное слово записано с использованием букв другого регистра( а <> А )
AnsiCompareText AnsiLowerText в помощь.
3. пример точный(см. п.2) в студию.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.11.2017 в 10:26.
evg_m вне форума Ответить с цитированием
Старый 28.11.2017, 14:31   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
if s=1 then
if s=0 then
Про такой тип, как boolean, что-нибудь слышали?

Код:
(a,s:integer;x:string)
У a и s область видимости - одна функция, зачем Вы их как параметры вызова объявили?

И вообще даже булеан тут не нужен:

Код:
function TForm4.pptt2(x:string): string;//определение присутствия слов в memo
var
  a: integer;
begin
  Result := 'нет';
  for a := 0 to Memo2.Lines.Count - 1 do
    if AnsiPos(x, Memo2.Lines[i]) > 0 then
    begin
       Result := 'да';
       break; 
    end;
end;
Ну и возникает дополнительный вопрос: должна ли функция искать целые слова или их вхождения? Например, если в двух строках написать "одинаковый" и "одинокий", то слово "один" найдётся, даже если его вообще не будет в тексте мемо
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 28.11.2017 в 14:37.
Sciv вне форума Ответить с цитированием
Старый 28.11.2017, 14:50   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
И вообще даже булеан тут не нужен:
короче:

Код:
function TForm4.pptt2(x:string): string;//определение присутствия слов в memo
var
  a: integer;
begin
  Result := 'да';
  for a := 0 to Memo2.Lines.Count - 1 do
    if AnsiPos(x, Memo2.Lines[i]) > 0 then
       Exit;
  Result := 'нет';
end;
или без цикла
Код:
function TForm4.pptt2(x:string): string;//определение присутствия слов в memo
begin
  if AnsiPos(x, Memo2.Text) > 0 
  then Result := 'да'
  else Result := 'нет';
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.11.2017, 14:52   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
if AnsiPos(x, Memo2.Lines[i]) > 0 then
Exit;
Действительно, короче Ну не люблю я Exit'ом пользоваться
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 28.11.2017, 15:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Действительно, короче Ну не люблю я Exit'ом пользоваться
ну, break - это тоже в некотором роде Exit, только локальный

но я обратил внимание на

Цитата:
Сообщение от wany.iv Посмотреть сообщение
определение присутствия слов в memo
боюсь, что автор топика задал неверное направление для решения задачи.
Дело в том, что задача проверки присутствия слов отличается от задачи проверки присутствия подстроки.
это разные задачи.
ну, например, дана строка: Докладчик выступал долго
проверить слово "клад". Очевидно, что такого слова нет в строке.
А подстрока - есть.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.11.2017, 17:18   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Дело в том, что задача проверки присутствия слов отличается от задачи проверки присутствия подстроки.
это разные задачи.
Ну что-то наподобие этого я и спросил у ТС в посте №3 (внизу мелким шрифтом)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа написано верно, но почему-то не работает (на Си) Дмитрий Огнев Помощь студентам 7 29.04.2014 20:19
strpos работает не верно с булевым значением SwitchOFF PHP 2 08.07.2011 14:31
Проверка текста Memo fineleave Помощь студентам 4 11.06.2011 21:48
функция сортировки массива работает не верно DroZd911 Помощь студентам 1 18.02.2011 05:33
fgets - работает не верно, и вообще тупит heart C++ Builder 14 29.11.2009 15:55