2014-04-08 20 views

Antwort

17

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; 
+2

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

-1

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); 
+0

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

Verwandte Themen