TStringlist.CommaText,分隔符问题

xk_su 2012-01-18 06:46:30
我有一个字符串



str := 'W GT, - Ws t,YU';

我用Stringlist分隔str

strlist.Delimiter := ',';
strlist.CommaText := str;

处理后,不但逗号的给分开了,空格也给分开了,我只要逗号分开就好,怎么搞

现在结果:
W
GT
-Wt
t
YU

我要的结果:
W GT
-Ws t
YU




...全文
576 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
npkaida 2012-01-20
  • 打赏
  • 举报
回复
利用 Delphi 自带的 ExtractStrings 函数即可解决:

procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStrings;
i: integer;
begin
sl:= TStringList.Create;
ExtractStrings([','],[' '],'W GT, - Ws t,YU',sl);
for i := 0 to sl.Count - 1 do
begin
// 针对 sl.Strings[i] 做一些事
// ......
end;
Memo1.Lines:=sl;
sl.Free;
end;


npkaida 2012-01-20
  • 打赏
  • 举报
回复
利用 Delphi 自带的 ExtractStrings 函数即可解决:

procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStrings;
i: integer;
begin
sl:= TStringList.Create;
ExtractStrings([','],[' '],'W GT, - Ws t,YU',sl);
for i := 0 to sl.Count - 1 do
begin
// 针对 sl.Strings[i] 做一些事
// ......
Memo1.Lines:=sl;
end;
sl.Free;
end;
tohaerok 2012-01-19
  • 打赏
  • 举报
回复

procedure SplitStr(Str, Str_Div: string; var List: TStringList);
var
I : Integer;
S: string;
begin
List.Clear;
for I := 1 to Length(WideString(Str)) do
begin
if WideString(Str)[I] <> WideString(Str_Div) then
S := S + WideString(Str)[I]
else
begin
List.Append(S);
S := '';
end;
end;
List.Append(S);
end;


SplitStr(Str, #44, List);
cntigercat 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 adslan 的回复:]

用StringReplace来分割字符,可以设置任意长度的字符当分隔符
S := 'W GT, - Ws t,YU';
ss := TStringList.Create;
ss.Text := StringReplace(S, ',', #13#10, [rfReplaceAll]);
SS[0]...
SS[1]...
ss.free;
[/Quote]
用这个比较靠谱
lghts 2012-01-19
  • 打赏
  • 举报
回复
delphi2010下可以设置StrictDelimiter属性为True。
delphi7没有这个属性,自己写吧
Q315054403 2012-01-19
  • 打赏
  • 举报
回复
str := '"W GT"," - Ws t",YU';
XE2试过,D7没试过
xk_su 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cntigercat 的回复:]
引用 3 楼 adslan 的回复:

用StringReplace来分割字符,可以设置任意长度的字符当分隔符
S := 'W GT, - Ws t,YU';
ss := TStringList.Create;
ss.Text := StringReplace(S, ',', #13#10, [rfReplaceAll]);
SS[0]...
SS[1]...
ss.free;
……
[/Quote]

这个还好点

我是把空格先替换了,最后用的时候再替换回来。。。
右脚小拇指 2012-01-19
  • 打赏
  • 举报
回复
class procedure TFTStrFunc.StrToList(AStr: string; var AList: TStringList; const ASplit: string = ',');
var
i, Len: Integer;
sTmp: string;
begin
AList.clear;
AStr := AStr + ASplit;
Len := Length(AStr);
i := 1;
sTmp := '';
while (i <= Len) do
begin
if AStr[i] <> ASplit then
sTmp := sTmp + AStr[i]
else
begin
if sTmp <> '' then
AList.Add(sTmp);
sTmp := '';
end;
Inc(i);
end;
if (AList.Count = 0) and (AStr <> ASplit) then
AList.Add(AStr);
end;

我写的这个函数,应该就可以解决
tj_snowwolf 2012-01-19
  • 打赏
  • 举报
回复
自己写个吧,不费什么事的
procedure SplitString(Source,Deli:string;var StrList:TStringList);
var
EndOfCurrentString:byte;
str:string;
begin
if (Source='') or (Deli='') then
Exit;
StrList.Clear;
EndOfCurrentString := Pos(Deli,Source);
while EndOfCurrentString > 0 do
begin
str := Copy(Source,1,EndOfCurrentString-1);
StrList.add(str);
Delete(Source,1,EndOfCurrentString + Length(Deli) -1);
EndOfCurrentString := Pos(Deli,Source);
end;
StrList.Add(source);
end;
Harryfin 2012-01-19
  • 打赏
  • 举报
回复
5楼正解,带空格的必须加上双引号,否则空格会被默认当成分割符
喝口水 2012-01-19
  • 打赏
  • 举报
回复
二楼的
strlist.linebreak
没见过,我的Delphi7中也找不到,是新版本的吗?
ADSLAN 2012-01-18
  • 打赏
  • 举报
回复
用StringReplace来分割字符,可以设置任意长度的字符当分隔符
S := 'W GT, - Ws t,YU';
ss := TStringList.Create;
ss.Text := StringReplace(S, ',', #13#10, [rfReplaceAll]);
SS[0]...
SS[1]...
ss.free;
BambooCaep 2012-01-18
  • 打赏
  • 举报
回复
strlist.linebreak := ','; strlist.Text := str;
喝口水 2012-01-18
  • 打赏
  • 举报
回复
不要太迷信现成的,与其费那么多的精力在Stringlist上,还不如自己做一下


procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
i:integer;
begin
str := 'W GT, - Ws t,YU';
i:=pos(',',str);
while i>0 do begin
memo1.Lines.Add(copy(str,1,i-1));
delete(str,1,i);
i:=pos(',',str);
end;
memo1.Lines.Add(str);
end;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧