这样的数字如何提取才是最优?(100分)

H

HLHGOD

Unregistered / Unconfirmed
GUEST, unregistred user!
有这样的字符串:101301,2101,23445.55
我想用3个变量分别把3个数字提取出来(用逗号分隔,且数字长度不固定),请大家给出一个
最优的方案。
 
var
str: string;
i: integer;
begin
str := '101301,2101,23445.55';
memo1.Text := StringReplace(str, ',', #13#10, [rfReplaceAll]);
for i := 0 to memo1.Lines.Count-1 do
showmessage(memo1.Lines.Strings);
end;
 
例如: 123,456,789
------------------------------
var
a,b,c:integer;
begin
Str:='123,456,789'; //要提的字符串
a:=strtoint(copy(Str,1,Pos(',',Str));
delete(Str,1,Pos(',',Str));
b:=strtoint(copy(Str,1,Pos(',',Str));
delete(Str,1,Pos(',',Str));
c:=Str;
end;
----------------------
如果是实数,把a,b,c换成double型即可!



 
第一种用了memo 第二种只能去3个数,你可以结合起来思考
作一个循环
 
这个方法最好:
Var
VarList:TStrings;
begin
VarList:=TStringList.Create;
VarList.CommaText:='101301,2101,23445.55';
....
这样 VarList.Strings[0]:='101301';
VarList.Strings[1]:='2101';
VarList.Strings[2]:='23445.55';
 
用memo只是方便显示,与用TStringList是一样的。
CommaText并不好用,帮助里有说它的不足。
看看这个,VarList.CommaText:='101301,2101,"23445.55';
 
// 得到分隔符中间的字段。N表示第几个分隔次,s为字符串,Letter为分割符.
function Chostr(S, Letter: string; N: integer): string;
var
i, j, sl: integer;
tmps: string;
begin
sl := length(s);
j := 0;
tmps := '';
n := n - 1;
for i := 1 to sl do
begin
if j = n then
if s <> Letter then
tmps := tmps + s
else
break;
if s = Letter then
inc(j);
end;
result := tmps;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
s:string;
ss:TStrings;
f:array of Real;
i:integer;
begin
s:='101301,2101,23445.55';
ss:=TStringList.create;
ss.CommaText:=s;
setLength(f,ss.count);
for i:=0 to ss.count-1 do
try
f:=strtofloat(ss);
except
f:=0;
end;

for i:=0 to high(f) do showmessage(floattostr(f));
setlength(f,0);
ss.free;
end;
 
第一种方法将memo改为stringlist
 
影子的办法就OK了
 
多谢各位,瓜分
 
顶部