str:='0012abcdefgh0010abcdes0009abcde'
判断第3、4两位,根据该值取数据长度,组成串,分别放到listbox上
如上面的在listbox上显示:
0012abcdefgh 
0010abcdes 
0009abcde  
-----------------
上面第一行总长为12字符,第二行总长为10字符,第三行总长为9字符

解决方案 »

  1.   

    while 1 do
    begin
      n := StrToInt(copy(str,3,2))
      listbox.items.add(Copy(str,1,n))
      str := copy(str,n+1,500)
      if str = '' then break
    end
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Str:String;
      i:Integer;
    begin
      Str:='0012abcdefgh0010abcdes0009abcde';
      ListBox1.Items.Clear;
      while true do
        begin
          i:=StrToInt(copy(Str,3,2));
          ListBox1.Items.Add(copy(Str,1,i));
          delete(str,1,i);
          if Str='' then Break;
        end;
    end;
      

  3.   

    procedure Tform1.stringAct(Mystr:string);
    var  i,j:integer;
    begin
      i:=0;
      j:=0;
      richedit1.Lines.Clear;
      i:=strtoint(MidStr(Mystr,j+1+2,2));
      richedit1.Lines.Add(leftstr(mystr,i));
      j:=i;
      i:=strtoint(MidStr(Mystr,j+1+2,2));
      richedit1.Lines.Add(midstr(mystr,j+1,i));
      j:=j+i;
      i:=strtoint(MidStr(Mystr,j+1+2,2));
      richedit1.Lines.Add(midstr(mystr,j+1,i));
      //
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Str:String;
      i:Integer;
    begin
      Str:='0012abcdefgh0010abcdes0009abcde';
      ListBox1.Items.Clear;
      repeat
        i:=StrToInt(copy(Str,3,2));
        ListBox1.Items.Add(copy(Str,1,i));
        delete(str,1,i);
      until Str='';
    end;
      

  5.   


    //AStr:存放原字符串
    //AList:存放结果
    //正确返回 true
    //错误返回 falsefunction str2list(AStr: string; AList: tstrings): boolean;//用来分隔字符串为LIST
      function SplitString(const source, ch: string): tstrings;
      var
        temp            : string;
        i               : integer;
      begin
        result := tstringlist.Create;
        temp := source;
        i := pos(ch, source);
        while i <> 0 do
          begin
            result.Add(copy(temp, 0, i - 1));
            delete(temp, 1, i);
            i := pos(ch, temp);
          end;
        result.Add(temp);
      end;var
      tList             : tstrings;         //分隔临时结果
      i                 : integer;
    begin
      result := false;
      tList := tstringlist.Create;
      try
        tList := SplitString(AStr, '00');
        for i := 0 to tList.Count - 1 do
          if tList.Strings[i] <> '' then
            begin
              if StrToInt(copy(tlist.Strings[i], 0, 2)) > length(tlist.Strings[i])
                then
                aList.Add('00' + tList.Strings[i])//如果是0009,就会分成两位,如09必须多补一个‘0’
              else
                aList.Add('0' + tList.Strings[i]);//一般的都会是3位,如012
            end;
      finally
        freeandnil(tList);
        result := true;
      end;
    end;
    其实这个也有些太烦了,你只要在'0012abcdefgh0010abcdes0009abcde'里找‘00’,然后加入到listbox里就行了
    过程大概如下:
    1.删除前两个'0',因为你查到的肯定是第一个,去掉就会找到下一个的位置
    2.用leftstr取前面的的pos个字符串,前加'00'后写入listbox
    3.用rightstr把余下的写到查找字符串里
    3.循环到POS不到结束
    如果你写不出来,给我再发短信,我给你写