直接切割就行了,给你举个例子
比如说
var
ss: Tstringlist;
str:string;
//
str:='1,2,3,4';
ss := tstringlist.Create;
ExtractStrings([','], [' '], pchar(str), ss);
//此时的ss中就保存有str按,分割之后的内容,即 ss.Count为4,ss.Strings[0]为'1',ss.Strings[3]为4
对于你上面的问题是一样的,因为不太清楚你具体的格式,你可以先清除换行符之类的,然后按|切割
追问我这个字符串难就难在格式不一致,有的在间隔符“|”的前面有的在后面,要是想您上面举例的那样,我就不会提问了哦。
追答没明白有什么不一样的,假定清掉回车什么的,然后把||替换为|,前后的|再去掉,结果就是
E3 73|F31 -11|E34 192|A3 -13
然后按|切割了,
你要的结果无非就是从0循环直到超出数组长度,步长为2(假定循环变量i),对于每一组数据 i 比如E3 F3 ,再按空格切割,得到E3和F73,同样再由i+1再得到F31和-11,分别就是你要的ABCD了,很简单的东西。
当然再简单点的方法就是用正则表达式来匹配了。
追问朋友能否加个好友,还请您明示,该问题对我来说实在是太难了
追答procedure TForm1.Button1Click(Sender: TObject);
var
source:string;
a,b,c,d:string;
part,sub: Tstringlist;
i:integer;
begin
source:='|E3 73|F31 -11|\r\n|E34 192|A3 -13|';
source:=stringreplace(source, '\r', '', [rfReplaceAll]);
source:=stringreplace(source, '\n', '', [rfReplaceAll]);
source:=stringreplace(source, '||', '|', [rfReplaceAll]);
source:=copy(source, 2, length(source) - 1);
source:=copy(source, 1, length(source) - 1);
part:=tstringlist.Create;
sub:=tstringlist.Create;
ExtractStrings(['|'], [' ','|'], pchar(source), part);
i:=0;
while i<part.Count do
begin
//showmessage(part.Strings[i]);
ExtractStrings([' '], [' '], pchar(part.Strings[i]), sub);
a:=sub.Strings[0];
b:=sub.Strings[1];
sub.Clear;
ExtractStrings([' '], [' '], pchar(part.Strings[i+1]), sub);
c:=sub.Strings[0];
d:=sub.Strings[1];
sub.Clear;
showmessage('a='+a+' b='+b+' c='+c+' d='+d);
i:=i+2;
end;
end;