如以下字符a,123456  789   562 a,569874   2356  a,56897123  12321 a,45698   2566......这样一串字符,需要从这里循环取出a,之后的数据,这里a,是取数据的标示,不知怎样写,在线急等

解决方案 »

  1.   

    用Pos  取得a 出现的位置  然后  copy..
      

  2.   

    没有人能给出一个循环用pos定位的实例吗,定了第一个之后,怎样定到第二个去,如此直到最后
      

  3.   

    如果你不想写循环,就把'a,'替换成一个特殊的字符(StringReplace),然后用TStringlist去分隔
    var
      list:TStringList;
    begin
      list := TStringList.Create;
      list.Delimiter := ':';//换成你的分隔符
      list.DelimitedText := '你的字符串';这样分割后的字符串列表就被放到list中了
      ShowMessage(list.Text);
    end;
      

  4.   

    给你一个分隔的,做参考~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;
      

  5.   

    如果你不想写循环,就把'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中了;我就是不知道怎样取出分隔符后的字符串,这里“你的字符串是什么”,让我手写进去;
      

  6.   

    你的字符串不就是'a,123456  789  562 a,569874  2356  a,56897123  12321 a,45698  2566......'这个嘛
      

  7.   

    我来补充完整好了!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; 
      

  8.   


    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;
      

  9.   

    现在算法的关系是这里想不通,第一个数取是没有问题,但是怎样抛掉,并接下来循环,如下算法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;
      

  10.   

    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;
      

  11.   

    不行,他们提出的数据,都是分了段的比如a,后面的数据他们不是整个取出都是因为有空格分了行,如'a,123456  789  562 ,取出后分出三行了,分别是,123456  789  562 我是要的是整个成一行,再用copy来取不同的数据,这样分开了怎么取,后面数据的合并和处理将更加麻烦,我试一下trim把空格去掉;
      

  12.   

    好了,问题解决了,不过还是没有真正的解决,只是采取了一个拆中的办法;但可以正确的取出数据了;代码如下: 
    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;
      

  13.   

    解决了~~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;