求救,字符串分割存放问题,好奇怪亚!(70分)

  • 主题发起人 主题发起人 蚂蚁根
  • 开始时间 开始时间

蚂蚁根

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做将s:=string;按‘空格’分割提取字符串,将一个字符串分割成多个子字符串,并存入strarr:=array[1..8] of string;中,编译正常,
结果出现错误,错误如下:
s字符串={(228.0 222.0 229.0 000 54.3 2.23 19.0 00100011 }
分割后出现的错误strarr[1]:=228.0
strarr[2]:=222.0
strarr[3]:=229.0
strarr[4]:=000
strarr[5]:=54.3
strarr[6]:=2.23
strarr[7]:=''
strarr[8]:=''////后面两个数据为空???为什么????
代码如下,请高手详细指点,急,在线等!!!!!!
if (pos('(',s)<>0) then//先去掉括号
begin
j:= 1;
sp1 := pos('(',s);
s :=' '+ copy(s,sp1+1,length(s)-sp1)+' ';

repeat //按空格分割
S1:='';
sp1:=pos(' ',s);
s:=copy(s,sp1+1,length(s)-sp1);
SP1:=0;
for i:=1 to length(s) do
begin
if copy(s,i,1)<>' ' then
begin
s:=copy(s,i,length(s)-i);
break;
end
ELSE showmessage('error');
end;

sp1:=pos(' ',s);
s3:= s3+inttostr(sp1)+'#';
s1:= copy(s,1,sp1-1);
s := copy(s,sp1,length(s)-sp1);
s2 :=s2+s1+'#';
strarr[j] := s1;
inc(j);
until length(s)=16;
showmessage(S3);
edit1.text := strarr[1]+'V';
edit4.text := strarr[3];
edit7.text := strarr[5];
edit13.text := strarr[4];
edit16.text := strarr[7];//+' '+Floattostr(9/5*strtofloat(strarr[7])+32)+'F';
END;
end;
 
建议使用TStrings
S : TStrings
S := TStringList.Create;
.
.
.
 
同意用iamy的方法,一般分割字符我也用这种方法
 
能说具体点吗?最好有代码,谢谢
 
StringList是Delphi中非常实用的字符串列表类:)

procedure TForm1.Button1Click(Sender: TObject);
var
SL:TStringList;
mstr:String;
i:Integer;
begin
mstr:='(228.0 222.0 229.0 000 54.3 2.23 19.0 00100011';
for i:=Length(mstr) downto 1 do
if not (mstr in ['0'..'9','.',' ']) then
Delete(mstr,i,1);
SL:=TStringList.Create;
SL.Delimiter:=' '
//指定空格为分隔符
SL.DelimitedText:=mstr;
if SL.Count>0 then
ShowMessage(SL[0]+#9+SL[SL.Count-1])
//分解出来的第一个和最后一个串
ShowMessage(SL.Text);
SL.Free;
end;
 
function StrCleft(AStr: String
AChar: Char
ALeft: Boolean = true): String;
// 以指定字符分离字符串
// AStr 源字符串
// AChar 分隔字符
// ALeft true:取分隔字符左侧
false:取右侧
// 如果字符串找不到分隔符,则取左边时为全部,取右边时为空值。

procedure StrToStrs(AStr: String
AChar: Char
var AStrs: TStrings);
// 将一字符串以指定字符分离成字符串集
// AStr 源字符串
// AChar 分隔字符
// AStrs 字符串集

function StrCleft(AStr: String
AChar: Char
ALeft: Boolean = true): String;
var
m: Integer;
begin
m := pos(AChar, AStr);
if m > 0 then
begin
if ALeft then
Result := copy(AStr, 1, m - 1)
else
Result := copy(AStr, m + 1, Length(AStr));
end
else begin
if ALeft then
Result := AStr
else
Result := '';
end;
end;

procedure StrToStrs(AStr: String
AChar: Char
var AStrs: TStrings);
var
strL, strR: string;
begin
strR := AStr;
AStrs.Clear;
while strR <> '' do
begin
strL := StrCleft(strR, AChar, true);
AStrs.Append(strL);
strR := StrCleft(strR, AChar, false);
end;
end;
 
Delphi自带了函数:ExtractStrings
 
用CommaText
var
Ls:TStrings;
begin
Ls.CommmaText:= '1,2.03,4';//用逗号分隔
end;
 
这样就行了
lsBox1.Items.Delimiter:= ' ';
lsBox1.Items.DelimitedText:= 'AB ccc xxx';
已测试可用,不管几个空格,TStrings的函数自动给分分离好
 
注释:谁有TSTRING,tstringlist,的详细资料,麻烦贴出来,谢谢,小弟我刚学半个多月,望大家帮助
 
凑个热闹

procedure TForm1.Button1Click(Sender: TObject);

var
strarr:array[1..8] of string;
S:string;
i:integer;
begin
s:='{(228.0 222.0 229.0 000 54.3 2.23 19.0 00100011 }';
delete (s,1,pos('(',s));
delete (s,pos('}',s),1);
for i:=1 to 8 do
begin
strarr:=copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s));
showmessage(strarr);
end;


end;
 
后退
顶部