tstringlist使用有关问题(非常奇怪的现象)
tstringlist使用问题(非常奇怪的现象)
procedure TForm1.btn2Click(Sender: TObject);
var
vlist:TStringList;
i:Integer;
a,b,c:string;
p,j:integer;
const
s ='a(bc),def(ghk)'; //括号和逗号都是中文输入法输入的。
begin
vlist:= TStringList.Create;
c:= ',';// 逗号是中文输入法输入的。
vlist.Delimiter:= c[1];
vlist.DelimitedText:= s;
ShowMessage(vlist.DelimitedText);
ShowMessage(IntToStr(vlist.Count));
for i:= 0 to vlist.Count - 1 do
begin
a:= vlist.Strings[i];
ShowMessage(a);
end;
end;
现在想把s分成'abc','defghk'.但这个结果是'a','bc','','def','ghk','',非常奇怪,请高手来看看。
------解决方案--------------------
',';//汉字占两个字节,
c[1];//你只取了其中一个字节进行拆分。
------解决方案--------------------
中文的符号是占2Byte,语句:vlist.Delimiter:= c[1];
只是将中文逗号的低位作为了分隔符,而不是中文“,”,所以出现这种上述情况。
TStringList不支持中文的Delimiter,自己写个解析函数吧。
------解决方案--------------------
中文的符号是占2Byte,语句:vlist.Delimiter:= c[1];
只是将中文逗号的低位作为了分隔符,而不是中文“,”,所以出现这种上述情况。
TStringList不支持中文的Delimiter,自己写个解析函数吧。
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
vlist:TStringList;
i:Integer;
a,b,c:string;
p,j:integer;
s1: string;
const
s ='a(bc),def(ghk)'; //括?和逗?都是中文?入法?入的。
begin
vlist:= TStringList.Create;
s1 := '';
i := 1;
while i <= Length(s) do
if (Copy(s, i, 2) = '(') or (Copy(s, i, 2) = ')') then
Inc(i, 2)
else if (Copy(s, i, 2) = ',') then
begin
vlist.Add(s1);
s1 := '';
Inc(i, 2);
end
else
begin
s1 := s1 + s[i];
Inc(i);
end;
vlist.Add(s1);
Memo1.Lines.Add(vlist.DelimitedText);
Memo1.Lines.Add(IntToStr(vlist.Count));
for i:= 0 to vlist.Count - 1 do
begin
a:= vlist.Strings[i];
Memo1.Lines.Add(a);
end;
end;
------解决方案--------------------
晕,我给的函数就可以啊。
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
vlist:TStringList;
procedure TForm1.btn2Click(Sender: TObject);
var
vlist:TStringList;
i:Integer;
a,b,c:string;
p,j:integer;
const
s ='a(bc),def(ghk)'; //括号和逗号都是中文输入法输入的。
begin
vlist:= TStringList.Create;
c:= ',';// 逗号是中文输入法输入的。
vlist.Delimiter:= c[1];
vlist.DelimitedText:= s;
ShowMessage(vlist.DelimitedText);
ShowMessage(IntToStr(vlist.Count));
for i:= 0 to vlist.Count - 1 do
begin
a:= vlist.Strings[i];
ShowMessage(a);
end;
end;
现在想把s分成'abc','defghk'.但这个结果是'a','bc','','def','ghk','',非常奇怪,请高手来看看。
------解决方案--------------------
',';//汉字占两个字节,
c[1];//你只取了其中一个字节进行拆分。
------解决方案--------------------
中文的符号是占2Byte,语句:vlist.Delimiter:= c[1];
只是将中文逗号的低位作为了分隔符,而不是中文“,”,所以出现这种上述情况。
TStringList不支持中文的Delimiter,自己写个解析函数吧。
------解决方案--------------------
中文的符号是占2Byte,语句:vlist.Delimiter:= c[1];
只是将中文逗号的低位作为了分隔符,而不是中文“,”,所以出现这种上述情况。
TStringList不支持中文的Delimiter,自己写个解析函数吧。
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
vlist:TStringList;
i:Integer;
a,b,c:string;
p,j:integer;
s1: string;
const
s ='a(bc),def(ghk)'; //括?和逗?都是中文?入法?入的。
begin
vlist:= TStringList.Create;
s1 := '';
i := 1;
while i <= Length(s) do
if (Copy(s, i, 2) = '(') or (Copy(s, i, 2) = ')') then
Inc(i, 2)
else if (Copy(s, i, 2) = ',') then
begin
vlist.Add(s1);
s1 := '';
Inc(i, 2);
end
else
begin
s1 := s1 + s[i];
Inc(i);
end;
vlist.Add(s1);
Memo1.Lines.Add(vlist.DelimitedText);
Memo1.Lines.Add(IntToStr(vlist.Count));
for i:= 0 to vlist.Count - 1 do
begin
a:= vlist.Strings[i];
Memo1.Lines.Add(a);
end;
end;
------解决方案--------------------
晕,我给的函数就可以啊。
------解决方案--------------------
procedure TForm1.Button1Click(Sender: TObject);
var
vlist:TStringList;