NI4304231969101936111/P3
NI430423196502180915/P1
NI430423196910193635/P2
如何取NI和/P之间的数
vNp := Format('/P%d', [J]);
StrRight(StrLeft(PNR.Text,vNp),'NI');
我这样子只能得到第一个.而不是我想要和按顺序/P1,/P2,/P3中的数;
还有一个问题.
1.张三 SERFV
1.张三 2.李四 SERPF
用1或2去截取SERFV或SERPF
如何得到1.张三,或2.李四 后面的字五个字母?

解决方案 »

  1.   

    1、copy函数加pos函数
    2、copy函数加pos函数
      

  2.   

    var
      str:string;
      i,j:integer;
    begin
      i:=pos('NI','NI4304231969101936111/P3');
      j:=pos('/p1','NI4304231969101936111/P3');
      str:=copy('NI4304231969101936111/P3',i+length('NI'),length('NI4304231969101936111/P3')-i-j);
    end;
    str结果是‘4304231969101936111’
      

  3.   

    3楼的结果不可能是‘4304231969101936111’,不过思路是对了,用POS来定位,用COPY来取得所要字符,用循环得到更多。
      

  4.   

    对于第一个问题,因为前面NI是固定的,只是后面有个/P然后加个数字,而楼主是想根据PN取得该组数中间的数字,所以可以这样
    function GetPN(str,PN:string):string;
    var
    i:integer;
    begin
    i:=pos(PN,str);
    if i>0 then
      result:=copy(str,3,length(str)-4-length(PN)
    else result:='';
    end;对于后面的一个问题,因为要取后面的5位,所以直接
    result:=Right(str,5);便是