使用特定字符串搜索文本文件

时间:2012-08-24 04:42:24

标签: delphi

是否可以逐行搜索TextFile以查找特定字符串。 即。你好 它逐行搜索以查找是否有任何行包含Hello。每行只有一个字符串。 这可能吗? 如果是这样,我该如何尝试?

2 个答案:

答案 0 :(得分:8)

将整个文件加载到内存中肯定是最简单的。如果您的文件足够小,那么您可以这样做:

found := false;
sl := TStringList.Create;
try
  sl.LoadFromFile(fileName);
  for line in sl do
    if Pos('Hello', line)<>0 then
    begin
      found := true;
      break;
    end;
finally
  sl.Free;
end;

我假设你说

  

如果任何一行有Hello,

您正在寻找包含搜索字符串的行而不是与搜索字符串相等的行。


在评论中你问:

  

好的,我可以问一下是否有可能询问如何做   从文件中删除从编辑框中键入的字符串?所以   您在编辑框中输入一个字符串,然后搜索该文件   为了它并删除该行?

这是上述的一个很容易的变化:

procedure RemoveLinesContaining(const fileName, searchText: string);
var
  sl: TStringList;
  i: Integer;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile(fileName);
    for i := sl.Count-1 downto 0 do
      if Pos(searchText, sl[i])<>0 then
        sl.Delete(i);
    sl.SaveToFile(fileName);
  finally
    sl.Free;
  end;
end;

此功能删除包含搜索字符串的所有行。如果您只想删除第一个这样的行,那么在调用Delete之后就会中断for循环。

循环变量降序以允许循环修改列表。

如果你想使用不同的测试,比如说是相等而不是包含,那么只需修改if语句。

答案 1 :(得分:1)

一种简单的方法是使用TStringList.LoadFromFile加载文件,然后检查IndexOf('hello') - 如果它大于-1,则该字符串位于文件中。

var
  sl : TStringList;
  ix : Integer;
begin
  sl := TStringList.Create;
  try      
    sl.LoadFromFile('test.txt'); 
    ix := sl.IndexOf('Hello');
    if ix > -1 then ShowMessage('Yup, the file contains a greeting.');
  finally 
    sl.Free;
  end;
end;