Gibt es in Delphi eine eingebaute Funktion, um alle Zeichenfolgen aus TStringList
zu entfernen, die leer sind?Leere Zeichenfolgen aus TStringList entfernen
Wie durchläuft die Liste, um diese Elemente zu entfernen?
Gibt es in Delphi eine eingebaute Funktion, um alle Zeichenfolgen aus TStringList
zu entfernen, die leer sind?Leere Zeichenfolgen aus TStringList entfernen
Wie durchläuft die Liste, um diese Elemente zu entfernen?
Um Ihre erste Frage zu beantworten, gibt es dafür keine integrierte Funktion. Das manuelle Looping ist einfach. Dies sollte es tun:
for I := mylist.count - 1 downto 0 do
begin
if Trim(mylist[I]) = '' then
mylist.Delete(I);
end;
Beachten Sie, dass die for-Schleife die Liste in umgekehrter Reihenfolge durchlaufen muss, ausgehend von Count-1 bis 0 für diese zu arbeiten.
Die Verwendung von Trim()
ist optional, abhängig davon, ob Sie Zeichenfolgen entfernen möchten, die nur Leerzeichen enthalten oder nicht. Wenn Sie die Anweisung if
in if mylist[I] = '' then
ändern, werden nur vollständig leere Zeichenfolgen entfernt.
Hier ist eine vollständige Routine den Code in Aktion zeigt:
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;
Ein anderer Weg, die den Aufwand beseitigt, die incur..should Arbeit mit jedem TStringList kompatibel Objekt Trim und Löschen.
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);
Ihre Lösung bietet eine Menge Overhead für das Verständnis. Aber es vermisst den Text nach dem Normalisierungsprozess auf "Memo1.Lines.Text" anzuwenden. BTW dies ist kompatibel mit 'TStrings' nicht nur' TStringList', versuchen Sie den Typ von 'Memo1.Lines.Text' zu überprüfen. – Wolf
Die Rückwärtsfahrt ist entscheidend (+1). Vielleicht sollte die Antwort lieber ein Wort darüber sagen, anstatt Details über einen "optionalen" Trim-Teil zu erzählen. – Wolf