分隔字符串的简单有关问题
分隔字符串的简单问题|310109570629206|朱弢||310109570629206|钟韡忆||310109570629206|蒋珅吉||31010957
分隔字符串的简单问题 |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次)。