Esiste una funzione di installazione in Delphi per rimuovere tutte le stringhe da uno TStringList
che sono vuote?Rimuovi stringhe vuote da TStringList
Come scorrere l'elenco per rimuovere questi elementi?
Esiste una funzione di installazione in Delphi per rimuovere tutte le stringhe da uno TStringList
che sono vuote?Rimuovi stringhe vuote da TStringList
Come scorrere l'elenco per rimuovere questi elementi?
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;
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);
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
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