如何从Delphi中的文本文件中删除特定行

Mar*_*den 9 delphi delphi-7 text-files

我有一个文本文件,其中逐行存储了用户信息.每行的格式为:UserID#UserEmail#UserPassword'#'为分隔符.

我试图使用此编码来执行任务:

var sl:TStringList;
begin
  sl:=TStringList.Create;
  sl.LoadFromFile('filename');
  sl.Delete(Index);
  sl.SaveToFile('filename');
  sl.free;
end;
Run Code Online (Sandbox Code Playgroud)

但我不确定在"索引"空间放什么.

有什么方法可以接收用户ID作为输入,然后从具有此用户ID的文本文件中删除文本行?任何帮助,将不胜感激.

Re0*_*ess 6

您可以设置NameValueSeparator#然后使用IndexOfName查找用户,只要用户名是文件中的第一个值.

sl.NameValueSeparator := '#';
Index := sl.IndexOfName('455115')
Run Code Online (Sandbox Code Playgroud)

所以在你的例子中,就像这样

var sl:TStringList;
begin
  sl:=TStringList.Create;
  sl.LoadFromFile('filename');
  sl.NameValueSeparator := '#';
  Index := sl.IndexOfName('455115')
  if (Index  <> -1) then
  begin
      sl.Delete(Index);
      sl.SaveToFile('filename');
  end;
  sl.free;
end;
Run Code Online (Sandbox Code Playgroud)

对于大型文件,这可能会很慢,因为IndexOfName会循环访问TStringList中的每一行,并依次检查每个字符串,直到找到匹配项为止.

免责声明:测试/使用Delphi 2007,Delphi 7可能不同.