Remove empty strings from TStringList

白昼怎懂夜的黑 提交于 2019-12-23 08:51:19

问题


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?


回答1:


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;



回答2:


Another way that eliminates the overhead that Trim and Delete incur..should work with any TStringList compatible object.

S := Memo1.Lines.Text;

// trim the trailing whitespace
While S[Length(S)] In [#10, #13] Do
  System.Delete(S, Length(S), 1);

// then do the rest
For I := Length(S) DownTo 1 Do
  If (S[I] = #13) And (S[I-1] = #10) Then
    System.Delete(S, I, 2);


来源:https://stackoverflow.com/questions/22944299/remove-empty-strings-from-tstringlist

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!