分隔字符串的简单问题
|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)就是前面的数字了,后面的姓名一样处理。两个字或者三个字用字符串总长就可以判断。
[解决办法]
[解决办法]
我在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次)。