Có chức năng tích hợp nào trong Delphi để xóa tất cả các chuỗi khỏi một số TStringList
bị trống không?Xóa các chuỗi rỗng khỏi TStringList
Làm cách nào để lặp qua danh sách để xóa các mục này?
Có chức năng tích hợp nào trong Delphi để xóa tất cả các chuỗi khỏi một số TStringList
bị trống không?Xóa các chuỗi rỗng khỏi TStringList
Làm cách nào để lặp qua danh sách để xóa các mục này?
Để trả lời câu hỏi đầu tiên của bạn, không có chức năng tích hợp cho điều đó. Looping bằng tay rất dễ dàng. Điều này nên làm điều đó:
for I := mylist.count - 1 downto 0 do
begin
if Trim(mylist[I]) = '' then
mylist.Delete(I);
end;
Lưu ý rằng vòng lặp for phải đi qua danh sách ngược lại bắt đầu từ Đếm 1 đến 0 để làm việc này.
Việc sử dụng Trim()
là tùy chọn, tùy thuộc vào việc bạn có muốn xóa các chuỗi chỉ chứa khoảng trắng hay không. Thay đổi tuyên bố if
thành if mylist[I] = '' then
sẽ chỉ xóa các chuỗi hoàn toàn trống.
Dưới đây là một thói quen đầy đủ cho thấy các mã trong hành động:
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;
Một cách khác mà loại bỏ sự overhead rằng Trim và Xóa công việc incur..should với bất kỳ đối tượng tương thích 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);
Giải pháp của bạn giới thiệu rất nhiều chi phí ** để hiểu ** nó. Nhưng nó bỏ lỡ để áp dụng văn bản cho 'Memo1.Lines.Text' sau quá trình chuẩn hóa. BTW này tương thích với 'TStrings' không chỉ' TStringList', hãy thử kiểm tra kiểu 'Memo1.Lines.Text'. – Wolf
Đảo ngược ngược lại là rất quan trọng (+1). Có lẽ câu trả lời tốt hơn nên nói một từ về điều này thay vì nói chi tiết về một phần "tùy chọn". – Wolf