如果你不想写循环,就把'a,'替换成一个特殊的字符(StringReplace),然后用TStringlist去分隔 var list:TStringList; begin list := TStringList.Create; list.Delimiter := ':';//换成你的分隔符 list.DelimitedText := '你的字符串';这样分割后的字符串列表就被放到list中了 ShowMessage(list.Text); end;
给你一个分隔的,做参考~function Split (S: string; SplitChar: string):TStrings ;//将字符串分隔 var P, L, C: Integer; begin Result.Clear; L := Length (S); //确定分隔符的长度,以便删除字符串中的相应字符 C := Length (SplitChar); //循环分隔字符串 repeat P := Pos (SplitChar, S); //如果在字符串中没有找到分隔符,说明为最后一个 if P = 0 then C := 1; Result.Add (Copy (S, P-C, L)); Delete(S, P, L); until P = 0; end;
如果你不想写循环,就把'a,'替换成一个特殊的字符(StringReplace),然后用TStringlist去分隔 var list:TStringList; begin list := TStringList.Create; StringReplace(str,'1,',':',[rfReplaceAll]); list.Delimiter := ':';//换成你的分隔符 list.DelimitedText := '你的字符串';这样分割后的字符串列表就被放到list中了 ShowMessage(list.Text); end;这里看不懂了list.DelimitedText := '你的字符串';这样分割后的字符串列表就被放到list中了;我就是不知道怎样取出分隔符后的字符串,这里“你的字符串是什么”,让我手写进去;
我来补充完整好了!var list:TStringList; str: string; i:integer; begin str := 'a,123456 789 562 a,569874 2356 a,56897123 12321 a,45698 2566'; list := TStringList.Create; try str := StringReplace(str,'a,',',',[rfReplaceAll]); list.Delimiter := ',';//换成你的分隔符 list.DelimitedText := str; for i := 0 to List.count - 1 do showmessage(List.strings[i]); finally list.Free; end; end;
procedure TForm1.btn1Click(Sender: TObject); var i:Integer; s:string; sli:TStringList; begin {mmo1: TMemo;} s:='a,123456 789 562 a,569874 2356 a,56897123 12321 a,45698 2566'; sli:=TStringList.Create; sli.CommaText:=s; for i:=0 to sli.Count-1 do if UpperCase(sli.Strings[i])<>'A' then self.mmo1.Lines.Add(sli.Strings[i]); sli.Free; end;
现在算法的关系是这里想不通,第一个数取是没有问题,但是怎样抛掉,并接下来循环,如下算法while not pos('a,',str)<>0 do 即便是这里后面结束后怎么返回这里因为ystr没有办法代替str这个值永远都是不等于0的,而用ystr那这时这个字符串是空的,附值是在后面;也循环不下去, begin splitstr:=copy(str,pos('a,',str),这里怎么知道第二个'a,'在那里);//这里取要的数据 ystr:=copy(str,这里又怎么知道第二个'a,'在那里,length(str)-这里又怎么知道第二个'a,'在那里);//这里对于字符串进行抛去。 ............ end;
procedure TForm1.Button1Click(Sender: TObject); var i: integer; s: String; strlist1: TStringList; begin s := 'a,123456 789 562 a,569874 2356 a,56897123 12321 a,45698 2566'; strlist1 := TStringList.Create; try s := stringReplace(s,'a,',':',[rfReplaceAll]); Strlist1.Delimiter := ':'; Strlist1.DelimitedText := s; for i:=0 to strlist1.Count-1 do begin if trim(strList1[i])<>'' then showmessage(strlist1[i]); end; finally strList1.Free; end; end;
好了,问题解决了,不过还是没有真正的解决,只是采取了一个拆中的办法;但可以正确的取出数据了;代码如下: var str,splitstr:string; titem:Tlistitem; RecRcallNO,ReccallNo,RecPrice,RecMes,RecTime:string; begin while pos('1,',str)<>0 do begin // showmessage(inttostr(pos('a,',str))); splitstr:=copy(str,pos('a,',str),86); // showmessage(splitstr); str:=copy(str,88,length(str)); RecRcallNo:=trim(copy(splitstr,3,11)); RecCallNo:=trim(copy(splitstr,28,11)); RecMes:=trim(copy(splitstr,53,6)); RecTime:=copy(splitstr,65,21); titem:=listview1.Items.Add; titem.Caption:=RecRcallNo; titem.SubItems.Add(RecCallNo); titem.SubItems.Add(RecTime); titem.SubItems.Add(RecMes); end;
解决了~~function ToBigRMB(RMB: string): string; const rmbNumber: array[0..10] of string=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖','点'); {定义数组} var i,j:integer; {定义枚举变量} n,m:integer;//零的个数,整数位数, s,t:string; begin s:=edit1.Text; m:=length(inttostr(trunc(strtofloat(s)))); j:=pos('.',s); if j=0 then j:=2 else j:=2-(length(s)-j); for i:= length(s) downto 1 do begin case s[i] of '.':begin t:=' '+t;end; else begin t:=rmbNumber[strtoint(s[i])]+' '+t;inc(j);end; end; end; n:=6-m;//6为十万(100000)的整数个数 if (pos('.',s)-6)=1 then begin result:=t ; end else begin repeat t:=rmbNumber[0]+' '+t; dec(n); until n = 0; result:=t; end; end;
var
list:TStringList;
begin
list := TStringList.Create;
list.Delimiter := ':';//换成你的分隔符
list.DelimitedText := '你的字符串';这样分割后的字符串列表就被放到list中了
ShowMessage(list.Text);
end;
var
P, L, C: Integer;
begin
Result.Clear;
L := Length (S);
//确定分隔符的长度,以便删除字符串中的相应字符
C := Length (SplitChar);
//循环分隔字符串
repeat
P := Pos (SplitChar, S);
//如果在字符串中没有找到分隔符,说明为最后一个
if P = 0 then C := 1;
Result.Add (Copy (S, P-C, L));
Delete(S, P, L);
until P = 0;
end;
var
list:TStringList;
begin
list := TStringList.Create;
StringReplace(str,'1,',':',[rfReplaceAll]);
list.Delimiter := ':';//换成你的分隔符
list.DelimitedText := '你的字符串';这样分割后的字符串列表就被放到list中了
ShowMessage(list.Text);
end;这里看不懂了list.DelimitedText := '你的字符串';这样分割后的字符串列表就被放到list中了;我就是不知道怎样取出分隔符后的字符串,这里“你的字符串是什么”,让我手写进去;
list:TStringList;
str: string;
i:integer;
begin
str := 'a,123456 789 562 a,569874 2356 a,56897123 12321 a,45698 2566';
list := TStringList.Create;
try
str := StringReplace(str,'a,',',',[rfReplaceAll]);
list.Delimiter := ',';//换成你的分隔符
list.DelimitedText := str;
for i := 0 to List.count - 1 do
showmessage(List.strings[i]);
finally
list.Free;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
i:Integer;
s:string;
sli:TStringList;
begin
{mmo1: TMemo;}
s:='a,123456 789 562 a,569874 2356 a,56897123 12321 a,45698 2566';
sli:=TStringList.Create;
sli.CommaText:=s;
for i:=0 to sli.Count-1 do
if UpperCase(sli.Strings[i])<>'A' then
self.mmo1.Lines.Add(sli.Strings[i]);
sli.Free;
end;
begin
splitstr:=copy(str,pos('a,',str),这里怎么知道第二个'a,'在那里);//这里取要的数据
ystr:=copy(str,这里又怎么知道第二个'a,'在那里,length(str)-这里又怎么知道第二个'a,'在那里);//这里对于字符串进行抛去。
............
end;
var
i: integer;
s: String;
strlist1: TStringList;
begin
s := 'a,123456 789 562 a,569874 2356 a,56897123 12321 a,45698 2566';
strlist1 := TStringList.Create;
try
s := stringReplace(s,'a,',':',[rfReplaceAll]);
Strlist1.Delimiter := ':';
Strlist1.DelimitedText := s;
for i:=0 to strlist1.Count-1 do
begin
if trim(strList1[i])<>'' then
showmessage(strlist1[i]);
end;
finally
strList1.Free;
end;
end;
var
str,splitstr:string;
titem:Tlistitem;
RecRcallNO,ReccallNo,RecPrice,RecMes,RecTime:string;
begin
while pos('1,',str)<>0 do
begin
// showmessage(inttostr(pos('a,',str)));
splitstr:=copy(str,pos('a,',str),86);
// showmessage(splitstr);
str:=copy(str,88,length(str));
RecRcallNo:=trim(copy(splitstr,3,11));
RecCallNo:=trim(copy(splitstr,28,11));
RecMes:=trim(copy(splitstr,53,6));
RecTime:=copy(splitstr,65,21);
titem:=listview1.Items.Add;
titem.Caption:=RecRcallNo;
titem.SubItems.Add(RecCallNo);
titem.SubItems.Add(RecTime);
titem.SubItems.Add(RecMes);
end;
const
rmbNumber: array[0..10] of string=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖','点'); {定义数组}
var i,j:integer; {定义枚举变量}
n,m:integer;//零的个数,整数位数,
s,t:string;
begin
s:=edit1.Text;
m:=length(inttostr(trunc(strtofloat(s))));
j:=pos('.',s);
if j=0 then
j:=2
else
j:=2-(length(s)-j);
for i:= length(s) downto 1 do
begin
case s[i] of
'.':begin t:=' '+t;end;
else begin t:=rmbNumber[strtoint(s[i])]+' '+t;inc(j);end;
end;
end;
n:=6-m;//6为十万(100000)的整数个数
if (pos('.',s)-6)=1 then
begin
result:=t ;
end
else
begin
repeat
t:=rmbNumber[0]+' '+t;
dec(n);
until n = 0;
result:=t;
end;
end;