Search code examples
delphitext-filesdelphi-7

How to delete a specific line from a text file in Delphi


I have a text file with user information stored in it line by line. Each line is in the format: UserID#UserEmail#UserPassword with '#' being the delimiter.

I have tried to use this coding to perform the task:

var sl:TStringList;
begin
  sl:=TStringList.Create;
  sl.LoadFromFile('filename');
  sl.Delete(Index);
  sl.SaveToFile('filename');
  sl.free;
end;

But I'm not sure what to put in the "index" space.

Is there any way I can receive the User ID as input and then delete the line of text from the text file that has this user ID in? Any help would be appreciated.


Solution

  • You can set the NameValueSeparator to # then use IndexOfName to find the user, as long as the username is the first value in the file.

    sl.NameValueSeparator := '#';
    Index := sl.IndexOfName('455115')
    

    So in your example, like so

    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;
    

    This may be slow on large files as IndexOfName loops though each line in the TStringList and checks each string in turn until it finds a match.

    Disclaimer: Tested/ works with Delphi 2007, Delphi 7 may be diffrent.