第一次写函数,很多问题不懂,请指教。
实现的功能类似Copy函数,不同的是我需要从第一个字符开始复制到某个字符结束。
例如:字符串:‘120元/月’,我只复制‘元’之前的数字。我写了下面的函数
Procedure TForm1.CopyTill(S,Y:String; 1:Integer);
Var
  S,Y,Str1:String;
begin
  S:='100Ôª';
  Y:='Ôª';
  Str1:=Copy(S,1,1);
  if Str1='Y' then begin
    Str2:='';
    exit;
  end else begin
    Str1:=Copy(S,1,2);
    if Str1='Y' then begin
      Str2:=Copy(S,1,1);
      exit;
    end else begin
      Str1:=Copy(S,1,3);
      if Str1='Y' then begin
        Str2:=Copy(S,1,2);
        exit;
      end else begin
        Str1:=Copy(S,1,4);
        if Str1='Y' then begin
          Str2:=Copy(S,1,3);
          exit;
        end;
      end;
    end;
  end;
end;不知道哪里有什么问题,如何返回函数中的返回值给主函数,知道的人帮帮我。
另外Procedure TForm1.CopyTill(S,Y:String; 1:Integer);这里我也不知道这样写对不对
谁知道请告诉我一下,谢谢了。

解决方案 »

  1.   

    把你要返回的值赋给Result就可以了
      

  2.   

    函数要这样写比较简洁一点:Function TForm1.CopyTill(S,Y:String): string;
    var
    iPos: integer;
    begin
    iPos:=Pos(Y, S);  //查找子串在源数据串中的位置
    if iPos>0 then  //找到
    result:=Copy(S, 1, iPos-1)
    else
    result:='';
    end;顺便问一下,你传入参数中的1:integer是什么意思?
      

  3.   

    规范的写我觉得应该是这样的:
    {-----------------------------------------------------------------------------
     Unit Name: CopyTill
     制作者:   XXX
     目的: 实现的功能类似Copy函数
     变量说明:sStr:原字符串;sPos:要拷贝的位置    
     Note:数据的返回最好用Var;函数的返回最好定义成Integer;因为有的机器不支持字符串的返回
    -------------------------------------------------------------------------------}
    function TForm1.CopyTill(sStr,sPos: String; var sResult: String): Integer;
    var
    iPos: integer;
    begin
      result := -1;
      iPos := Pos(sStr, sPos);               //查找子串在源数据串中的位置
      if iPos > 0 then
        sResult := Copt(sStr,1,iPos - 1);    //返回需要的内容
      result := 0;
    end;