2014-04-08 34 views

risposta

17

Per rispondere alla prima domanda, non esiste una funzione incorporata per questo. Il ciclo manuale è facile. Questo dovrebbe farlo:

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

Si noti che il ciclo for deve attraversare la lista in retromarcia partendo da Count-1 fino a 0 per questo al lavoro.

L'utilizzo di Trim() è facoltativo, a seconda che si desideri rimuovere stringhe che contengono solo spazi vuoti o meno. La modifica dell'istruzione if su if mylist[I] = '' then rimuoverà solo le stringhe completamente vuote.

Qui è una routine completa che mostra il codice in azione:

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

L'attraversamento inverso è fondamentale (+1). Forse la risposta dovrebbe meglio dire una parola su questo invece di dire dettagli su una parte "Trim" "opzionale". – Wolf

-1

Un altro modo che elimina il sovraccarico che Trim ed Elimina il lavoro incur..should con qualsiasi oggetto compatibile con TStringList.

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

La tua soluzione introduce molto ** overhead per capire ** it. Ma manca di applicare il testo a 'Memo1.Lines.Text' dopo il processo di normalizzazione. BTW questo è compatibile con 'TStrings' non solo' TStringList', prova a controllare il tipo di 'Memo1.Lines.Text'. – Wolf

Problemi correlati