是否可以逐行搜索TextFile以查找特定字符串。 即。你好 它逐行搜索以查找是否有任何行包含Hello。每行只有一个字符串。 这可能吗? 如果是这样,我该如何尝试?
答案 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;