读书人

分隔字符串的简单有关问题

发布时间: 2012-02-27 10:00:22 作者: rapoo

分隔字符串的简单问题
|310109570629206 |朱 |
|310109570629206 |钟忆 |
|310109570629206 |蒋吉 |
|310109570629206 |汪丽 |

将数据放入数组中
ssTemp:= TStringList.Create;
ssTemp.Text := replace(trim(strings[j]),'|',#13#10);

这时候少数一部分姓名读取出来是乱码(如上,大部分没有问题),将分隔符'|'换成'@'就没有问题。
初步判断应该'|'引起的。有没有办法在保留'|'分隔符的前提下将信息正确的读取出来。
先谢谢了

[解决办法]
button1事件
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i :=0 to memo1.Lines.Count-1 do begin
ExtractStrings(['|'],[' '],pchar(memo1.Lines[i]),memo2.Lines);
end;
end;

memo1放入的要转换的
|310109570629206 |朱 |
|310109570629206 |钟忆 |
|310109570629206 |蒋吉 |
|310109570629206 |汪丽 |

memo2来接收没发现有乱码的 结果如下
Memo2
310109570629206

310109570629206
钟忆
310109570629206
蒋吉
310109570629206
汪丽

[解决办法]
既然是固定格式你完全可以忽略分隔符,直接用Copy从中间取出子串来。

copy(xxx, 2, 15)就是前面的数字了,后面的姓名一样处理。两个字或者三个字用字符串总长就可以判断。
[解决办法]

探讨
引用:
1.你用的是什么版本的DELPHI,2009以上的可能是unicode的问题
2.replace函数是自己写的吗?


1.我用的是delphi5 .
2.replace 函数如下
function replace(str:string;subStr:string;replaceStr:string):string;
var i:integer;
begin
i:=Pos(subStr,str);
while i >0 do
begin
Delete(str,i,length(subStr));
Insert(replaceStr,str,i);
i:=Pos(subStr,str);
end;
Result:=str;
end;

[解决办法]
我在delphi6下用#4的的确有乱码,这样就可以:
procedure TForm1.Button1Click(Sender: TObject);
var
s:WideString;
begin
s:=memo1.Lines.Text;
s:=StringReplace(s,'|',#13#10,[rfReplaceAll]);
Memo2.lines.add(s);
end;
看来是ExtractStrings的问题

[解决办法]
探讨
引用:
我在delphi6下用#4的的确有乱码,这样就可以:
procedure TForm1.Button1Click(Sender: TObject);
var
s:WideString;
begin
s:=memo1.Lines.Text;
s:=StringReplace(s,'|',#13#10,[rfReplaceAll]);
Memo2.lines.add(s);
end;
看来是ExtractStrings的问题


请问我的代码问题在哪里?

[解决办法]
刚才看了下lz的例子,个人认为:

因为汉字是占双字节,恰好'|'字符的ascii码值在你每个名字里面都可能有与'|'字符相同的值 所以在你用replace函数替换的时候不仅仅替换掉本身要替换的'|'字符,而且还把名字中与'|'字符ascii码相等的字节替换掉了(因为你这里定义为string类型,pos的时候就按照单字节去搜索,1个汉字就会比对2次)。

读书人网 >.NET

热点推荐