Search code examples
delphivcl

Remove empty strings from TStringList


Is there any build-in function in Delphi to remove all strings from a TStringList which are empty?

How to loop through the list to remove these items?


Solution

  • To answer your first question, there is no built in function for that. Looping manually is easy. This should do it:

    for I := mylist.count - 1 downto 0 do
    begin
      if Trim(mylist[I]) = '' then
        mylist.Delete(I);
    end;
    

    Note that the for loop must traverse the list in reverse starting from Count-1 down to 0 for this to work.

    The use of Trim() is optional, depending on whether you want to remove strings that contain just whitespace or not. Changing the if statement to if mylist[I] = '' then will remove only completely empty strings.

    Here is a full routine showing the code in action:

    procedure TMyForm.Button1Click(Sender: TObject);
    var
      I: Integer;
      mylist: TStringList;
    begin
      mylist := TStringList.Create;
      try
        // Add some random stuff to the string list
        for I := 0 to 100 do
          mylist.Add(StringOfChar('y', Random(10)));
        // Clear out the items that are empty
        for I := mylist.count - 1 downto 0 do
        begin
          if Trim(mylist[I]) = '' then
            mylist.Delete(I);
        end;
        // Show the remaining items with numbers in a list box
        for I := 0 to mylist.count - 1 do
          ListBox1.Items.Add(IntToStr(I)+' '+mylist[I]);
      finally
        mylist.Free;
      end;
    end;