|310109570629206 |朱弢 |
|310109570629206 |钟韡忆 |
|310109570629206 |蒋珅吉 |
|310109570629206 |汪丽韡 |将数据放入数组中
ssTemp:= TStringList.Create;
ssTemp.Text := replace(trim(strings[j]),'|',#13#10);
这时候少数一部分姓名读取出来是乱码(如上,大部分没有问题),将分隔符'|'换成'@'就没有问题。
初步判断应该'|'引起的。有没有办法在保留'|'分隔符的前提下将信息正确的读取出来。
先谢谢了
|310109570629206 |钟韡忆 |
|310109570629206 |蒋珅吉 |
|310109570629206 |汪丽韡 |将数据放入数组中
ssTemp:= TStringList.Create;
ssTemp.Text := replace(trim(strings[j]),'|',#13#10);
这时候少数一部分姓名读取出来是乱码(如上,大部分没有问题),将分隔符'|'换成'@'就没有问题。
初步判断应该'|'引起的。有没有办法在保留'|'分隔符的前提下将信息正确的读取出来。
先谢谢了
2.replace函数是自己写的吗?
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
汪丽韡
310109570629206
朱?
310109570629206
钟?
忆
310109570629206
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;
这是你自己写的函数?试试看StringReplace,系统自带的。
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的问题
vart:tstringlist;
begin
t:=tstringlist.Create;
t.Delimiter:='|';
t.DelimitedText:=Memo1.Lines.Text;
Memo2.lines.AddStrings(t);
t.Free;
end;
s:String;
begin
s:=memo1.Lines.Text;
s:=StringReplace(s,'|',#1……
也是正确的
*****************************************************************************
Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero
AnsiStrPos
****************************************************************************
Call AnsiStrPos to locate the first occurrence of SubStr in Str. If SubStr does not occur in Str, AnsiStrPos returns nil.
Unlike the StrPos function, AnsiStrPos works with multi-byte characters sets (MBCS).
之所以replce不行,而StringReplace可以最终归结到pos 和 AnsiStrPos函数的区别
MBCS就是多字节字符集,某些字符只用一个字节表示,而另外的一些字符就用多于一个字节的数据来表示。
肯能 就是AnsiStrPos能辨别哪些字符是单字节,哪些字符是双字节。但是pos就不能一律采取单字节来操作地。