如何在delphi中拆分字符串
我只需要将一个字符串如:"STANS", "Payment, chk#1", ,1210.000
拆分为基于,
的数组。在字符串列表中的结果将是如何在delphi中拆分字符串
STANS
Payment, chk#1
1210.000
创建TStringList
并分配逗号分隔字符串StringList.CommaText
。这将解析您的输入并将拆分字符串作为字符串列表的项目返回。
StringList.CommaText := '"STANS", "Payment, chk# 1", ,1210.000';
//StringList[0]='STANS'
//StringList[1]='Payment, chk# 1'
//etc.
如果它不能正常工作,网络上也有改进的版本。 – mj2008 2011-06-10 08:43:27
@ mj2008请您详细说明一下吗?此代码在给出的示例中正常工作。如果你打算揭穿答案,最好提供一些证据。如果你有证据,那么我会非常高兴地立场纠正。 – 2011-06-10 08:52:24
我向你投了赞,并认为这是正确的答案。我不是为了“揭穿”你!我有一个来自Magenta Systems的TStringCSVList,它有一些空间的改进,但它是从2000年开始的,所以也许现在的Delphi实现更好。对于良好的CSV,Delphi是很好的开箱即用的。对于狡猾的CSV,那里有类似的东西。 – mj2008 2011-06-10 09:08:55
我写了这个功能和完美的作品,我在2007年德尔福
function ParseCSV(const S: string; ADelimiter: Char = ','; AQuoteChar: Char = '"'): TStrings;
type
TState = (sNone, sBegin, sEnd);
var
I: Integer;
state: TState;
token: string;
procedure AddToResult;
begin
if (token <> '') and (token[1] = AQuoteChar) then
begin
Delete(token, 1, 1);
Delete(token, Length(token), 1);
end;
Result.Add(token);
token := '';
end;
begin
Result := TstringList.Create;
state := sNone;
token := '';
I := 1;
while I <= Length(S) do
begin
case state of
sNone:
begin
if S[I] = ADelimiter then
begin
token := '';
AddToResult;
Inc(I);
Continue;
end;
state := sBegin;
end;
sBegin:
begin
if S[I] = ADelimiter then
if (token <> '') and (token[1] <> AQuoteChar) then
begin
state := sEnd;
Continue;
end;
if S[I] = AQuoteChar then
if (I = Length(S)) or (S[I + 1] = ADelimiter) then
state := sEnd;
end;
sEnd:
begin
state := sNone;
AddToResult;
Inc(I);
Continue;
end;
end;
token := token + S[I];
Inc(I);
end;
if token <> '' then
AddToResult;
if S[Length(S)] = ADelimiter then
AddToResult
end;
这不是一个答案,但我不能作出评论尚未...我 怎么可以这样做,但取而代之的是“,”有“;”... 谢谢 – azrael11 2011-06-10 06:49:02