这是假设字符串只分为两段,一段是汉字部分 ,一段是数字部分, 而提取数据的部分如下: function GetNumber(const Str:string):double; var i:integer; Numstr:string; begin for i:=1 to length(Str) do begin if str[i] in ['0'..'9','.'] then Numstr:=Numstr+str[i]; end; result:=strtoFloat(Numstr); end;
procedure Tlgsfzf.SB_confirmClick(Sender: TObject); var s1,ss:string; i,j:integer;begin SB_confirm.Enabled:=false; SB_cancel.Enabled:=true; CDload.Close; CDload.CommandText:='select part_amount from '+DatabaseName+'SC_art_card '; CDload.Open; CDload.First; while not CDload.Eof do begin try s1:=''; ss:=CDload.fieldbyname('part_amount').asstring; if length(ss)>1 then begin if (ord(byte(ss[length(ss)]))>=31) and (ord(byte(ss[length(ss)]))<= 39) or (ord(byte(ss[length(ss)]))= 46) then j:=length(ss)-1 else j:=length(ss); for i:=1 to j do begin s1:=s1+chr(ord(byte(ss[i]))); end; end; //s1:=copy(ss,1,s1); CDload.Edit; CDload.fieldbyname('part_amount').asstring:=s1; except end; CDload.Next; end; CDload.ApplyUpdates(-1); 我是这样写的,请大家看看有什么问题
procedure Tlgsfzf.SB_confirmClick(Sender: TObject); var ss,s1,result:string; i,j:integer; ps: array[0..9] of char; begin SB_confirm.Enabled:=false; SB_cancel.Enabled:=true; CDload.Close; CDload.CommandText:='select part_amount from '+DatabaseName+'SC_art_card '; CDload.Open; CDload.First; while not CDload.Eof do begin try s1:=''; ss:=CDload.fieldbyname('part_amount').asstring; if length(ss)>1 then begin for i:=1 to length(ss) do if ((ss=ps)or (pos(',',ss)>0)) then s1:=s1+ss else s1:=s1; end; result:=s1; //s1:=copy(ss,1,s1); CDload.Edit; CDload.fieldbyname('part_amount').asstring:=result; except end; CDload.Next; end; CDload.ApplyUpdates(-1); end. 还有这种写法,大家看有什么问题。
而提取数据的部分如下:
function GetNumber(const Str:string):double;
var i:integer; Numstr:string;
begin
for i:=1 to length(Str) do
begin
if str[i] in ['0'..'9','.'] then
Numstr:=Numstr+str[i];
end;
result:=strtoFloat(Numstr);
end;
var s1,ss:string;
i,j:integer;begin
SB_confirm.Enabled:=false;
SB_cancel.Enabled:=true;
CDload.Close;
CDload.CommandText:='select part_amount from '+DatabaseName+'SC_art_card ';
CDload.Open;
CDload.First;
while not CDload.Eof do
begin
try
s1:='';
ss:=CDload.fieldbyname('part_amount').asstring;
if length(ss)>1 then
begin
if (ord(byte(ss[length(ss)]))>=31) and (ord(byte(ss[length(ss)]))<= 39) or (ord(byte(ss[length(ss)]))= 46) then
j:=length(ss)-1
else
j:=length(ss);
for i:=1 to j do
begin
s1:=s1+chr(ord(byte(ss[i])));
end;
end;
//s1:=copy(ss,1,s1);
CDload.Edit;
CDload.fieldbyname('part_amount').asstring:=s1;
except
end;
CDload.Next;
end;
CDload.ApplyUpdates(-1);
我是这样写的,请大家看看有什么问题
var ss,s1,result:string;
i,j:integer;
ps: array[0..9] of char;
begin
SB_confirm.Enabled:=false;
SB_cancel.Enabled:=true;
CDload.Close;
CDload.CommandText:='select part_amount from '+DatabaseName+'SC_art_card ';
CDload.Open;
CDload.First;
while not CDload.Eof do
begin
try
s1:='';
ss:=CDload.fieldbyname('part_amount').asstring;
if length(ss)>1 then
begin
for i:=1 to length(ss) do
if ((ss=ps)or (pos(',',ss)>0)) then
s1:=s1+ss
else s1:=s1;
end;
result:=s1;
//s1:=copy(ss,1,s1);
CDload.Edit;
CDload.fieldbyname('part_amount').asstring:=result;
except
end;
CDload.Next;
end;
CDload.ApplyUpdates(-1);
end.
还有这种写法,大家看有什么问题。