字符串'001'到字符串'1'用了IntToStr(StrToInt('001'))对于标题所述,写了个函数如下:
function ConvertDeh(aDEH: string): String;
var
  p: integer;
  StrBefore,StrBehind:string;  function GetNumberFromStr(aStr: String): String;
  var
    i,p: integer;
  begin
    Result := '';
    for i:=1 to Length(aStr) do
      if Ord(aStr[i]) in [Ord('0')..ord('9')] then
      Result := Result + aStr[i];
  end;
begin
  p := pos('-',aDEH);
  StrBefore := LeftStr(aDEH,p-1);
  StrBefore := GetNumberFromStr(StrBefore);
  StrBehind := RightStr(aDEH,length(aDEH)-p);
  StrBehind := GetNumberFromStr(StrBehind);
  Result := IntToStr(StrToInt(StrBefore)) + '-' + IntToStr(StrToInt(StrBehind));
end;因为这函数放在一个循环里面,数据量大时,速度成个问题,请教更快的写法;

解决方案 »

  1.   

    function ConvertString(const Value: string): string;
    var
      i0, iOrd: Integer;
      iStart: array[0..1] of Integer;
      iEnd: array[0..1] of Integer;
    begin
      iOrd := 0;
      iStart[0] := 0;
      iStart[1] := 0;
      iEnd[1] := Length(Value);
      for i0 := 1 to iEnd[1] do
        case Value[i0] of
          '-': begin
                 iEnd[iOrd] := i0;
                 Inc(iOrd);
               end;
          '1'..'9':
               begin
                 if iStart[iOrd] = 0 then
                   iStart[iOrd] := i0;
               end;
        end;
      Result := Copy(Value, iStart[0], iEnd[0] - iStart[0] + 1) +
                Copy(Value, iStart[1], iEnd[1] - iStart[1] + 1);
    end;
    //Result: 0.07
    //Datas: 10000