Delphi XE7 TStrings.DelimitedText
Delphi XE7 TStrings.DelimitedText
我想填充一个 TStringList
并得到一个逗号分隔的引用结果。
根据我所读的内容,这是可能的,但我只是得到一个逗号分隔的结果,没有引号。我无法让它删除重复项。
procedure TForm5.BitBtn1Click(Sender: TObject);
var
sl : TStringList;
s : string;
begin
sl := TStringList.Create;
try
sl.Delimiter := ',';
sl.QuoteChar := '"';
sl.Duplicates := dupIgnore;
//sl.DelimitedText := '"1","2","3"';
sl.DelimitedText := '1,2,3';
sl.Add('a');
sl.Add('2');
s := sl.DelimitedText;
ShowMessage(s);
finally
sl.Free;
end;
end;
我一直将 var s
设置为 1,2,3,a,2
,但我期望的是 "1","2","3","a"
。
TStrings.DelimitedText
属性 getter 将字符串包装在 QuoteChar
仅当 包含以下任一内容时:
#0
空字符。
QuoteChar
角色
Delimiter
角色
- 如果
TStrings.StrictDelimiters
为假,#1..#32
之间的任何 ASCII whitespace/control 字符,包括在内。
如果您希望字符串始终被引用,则必须手动引用它们,例如:
procedure TForm5.BitBtn1Click(Sender: TObject);
var
sl : TStringList;
s, tmp : string;
i: Integer;
begin
sl := TStringList.Create;
try
sl.Delimiter := ',';
sl.QuoteChar := '"';
sl.Duplicates := dupIgnore;
//sl.DelimitedText := '"1","2","3"';
sl.DelimitedText := '1,2,3';
sl.Add('a');
sl.Add('2');
//s := sl.DelimitedText;
s := '';
for I := 0 to sl.Count-1 do
S := S + AnsiQuotedStr(sl[I], sl.QuoteChar) + sl.Delimiter;
Delete(S, Length(S), 1);
ShowMessage(s);
finally
sl.Free;
end;
end;
试试这个:
procedure TForm1.FormCreate(Sender: TObject);
var
sl : TStringList;
s : string;
begin
sl := TStringList.Create;
try
sl.Delimiter := ',';
sl.QuoteChar := #0; // default = '"'
sl.Duplicates := dupIgnore;
sl.DelimitedText := '"1","2","3"';
sl.Add('a');
sl.Add('"2"');
s := sl.DelimitedText;
ShowMessage(s);
finally
sl.Free;
end;
end;
我想填充一个 TStringList
并得到一个逗号分隔的引用结果。
根据我所读的内容,这是可能的,但我只是得到一个逗号分隔的结果,没有引号。我无法让它删除重复项。
procedure TForm5.BitBtn1Click(Sender: TObject);
var
sl : TStringList;
s : string;
begin
sl := TStringList.Create;
try
sl.Delimiter := ',';
sl.QuoteChar := '"';
sl.Duplicates := dupIgnore;
//sl.DelimitedText := '"1","2","3"';
sl.DelimitedText := '1,2,3';
sl.Add('a');
sl.Add('2');
s := sl.DelimitedText;
ShowMessage(s);
finally
sl.Free;
end;
end;
我一直将 var s
设置为 1,2,3,a,2
,但我期望的是 "1","2","3","a"
。
TStrings.DelimitedText
属性 getter 将字符串包装在 QuoteChar
仅当 包含以下任一内容时:
#0
空字符。QuoteChar
角色Delimiter
角色- 如果
TStrings.StrictDelimiters
为假,#1..#32
之间的任何 ASCII whitespace/control 字符,包括在内。
如果您希望字符串始终被引用,则必须手动引用它们,例如:
procedure TForm5.BitBtn1Click(Sender: TObject);
var
sl : TStringList;
s, tmp : string;
i: Integer;
begin
sl := TStringList.Create;
try
sl.Delimiter := ',';
sl.QuoteChar := '"';
sl.Duplicates := dupIgnore;
//sl.DelimitedText := '"1","2","3"';
sl.DelimitedText := '1,2,3';
sl.Add('a');
sl.Add('2');
//s := sl.DelimitedText;
s := '';
for I := 0 to sl.Count-1 do
S := S + AnsiQuotedStr(sl[I], sl.QuoteChar) + sl.Delimiter;
Delete(S, Length(S), 1);
ShowMessage(s);
finally
sl.Free;
end;
end;
试试这个:
procedure TForm1.FormCreate(Sender: TObject);
var
sl : TStringList;
s : string;
begin
sl := TStringList.Create;
try
sl.Delimiter := ',';
sl.QuoteChar := #0; // default = '"'
sl.Duplicates := dupIgnore;
sl.DelimitedText := '"1","2","3"';
sl.Add('a');
sl.Add('"2"');
s := sl.DelimitedText;
ShowMessage(s);
finally
sl.Free;
end;
end;