问题
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