如果在备忘录中找不到字符串,则显示消息

时间:2013-12-03 07:31:31

标签: string delphi search integer

procedure TForm1.bFAT1Click(sender: TObject);
    var
     FAT: Integer;
    begin
       for FAT := 0 to memo1.lines.Count - 1 do
        begin
          if AnsiContainsStr(memo1.lines[FAT], 'Olive Oil') then
          begin
          ShowMessage('Olive Oil exist!');
          end;
        end;
     // But  how to show message if integer is empty?        
    end;

如果没有包含'橄榄油'的行,我想做点什么。怎么做?

1 个答案:

答案 0 :(得分:2)

您需要的是Exit语句,以便在找到匹配元素后立即离开该过程。这样,当你到达程序的最后,你知道你没有找到匹配的元素:

for FAT := 0 to memo1.lines.Count - 1 do
begin
  if AnsiContainsStr(memo1.lines[FAT], 'Olive Oil') then
  begin
    ShowMessage('Olive Oil exist!')
    Exit;  // we can stop here since we found it       
  end;
end;

// we only come here if no line contained 'Olive Oil' (because of the EXIT)
ShowMessage('Olive Oil does not exist!');

编辑 :(受@David启发)最好将逻辑与UI /显示分开(例如ShowMessage)。为此,您可以定义如下函数:

function IndexOfLineContaining(const Text : String; Lines : TStrings) : Integer;
begin
  for Result := 0 to Lines.Count - 1 do
    if AnsiContainsStr(Lines[Result], Text) then 
      Exit;
  Result := -1;
end;

最重要的是,你可以轻松定义一个布尔函数:

function HasLineContaining(const Text : String; Lines : TStrings) : Boolean;
begin
  Result := (IndexOfLineContaining(Text, Lines) > -1);
end;

并使用它来显示消息:

if HasLineContaining('Olive Oil', Memo1.Lines) then
  ShowMessage ('foo')
else
  ShowMessage ('bar');   

我建议您在术语上稍作一些,以使您的问题更加清晰。整数不能为空,句子“如果[FAT]没有找到'橄榄油'就行了。” FAT是一个整数是没有任何意义的。