我有一個文本DBEDIT,內容為125*356*89MM現在我想提取中間的數字進行四則運算如(125+356)*(125+89+)*(356+89)等各種運算(這裡只是列舉一種,我又不想將這三個數字分別輸入到三個文本框DBEDIT1,DBEDIT12,DBEDIT3中,請教這樣的問題要怎樣編寫代碼?謝謝

解决方案 »

  1.   

    最简单的是做一个假的‘select (125+356)*(125+89+)*(356+89)  as AA’的SQL语句
      

  2.   

    用pos() 求出来每两个* 的位置 然后再取数  运算   看看可以吗
      

  3.   

    用POS()怎樣取數啊?現在問題就是不知道怎樣取出兩個*之間的數字。
      

  4.   

    假如aa:='123,45,56'
    那么123*45=copy(aa,1,3)*copy(aa,pos(','aa)+1,pos(','aa)+2)
      

  5.   

    写一个函数吧
    function AA(const Value : String):TStringList;
    var
      S :String;
      p , Start :PChar;
    begin
      Result := TStringList.Create;
      p := pointer(Value);
      if p <> nil then
      begin
        while p^ <> #0 do
        begin
          Start := p;
          while not (p^ IN ['*',#0]) do
          begin
            Inc(p);
          end;
          SetString(S, Start, P - Start);
          Result.Add(s);
          if P^ = '*' then Inc(P);
        end;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      A : TStringList;
      i:Integer;
    begin
      A:=TStringList.Create;
      A:=AA('123456*789');
      for i:=0 to A.Count-1 do
        ShowMessage(A[i]);
    end;
    将分离的结果存到一个TStringList里面
    以后你想怎么处理就怎么处理!
      

  6.   

    wozhuchuanwei(一个组件编写者,就一定是一个更优秀的Delphi开发者):很感謝你給我的代碼,剛才運行了一下,你取出來的是單個數字,如何才能取得數組的維數,因為有的數字是二個,有的是三個,如果是固定三個數的話我可以用1,2,3來提取但它是動態雖然不超過3位,但無法提取它的下標,還有你是以*為分界提取如果最後一個有諸如16MM的話它提取的是16MM而不是16,所以最後還是要進行一次處理才能運算,不過你給我的代碼,解決了一大半的問題,非常感謝你。