Q&A

  • memo에서 숫자만 더해주는데 두자리이상은 어케 알수있는지여?
혹시...답변이 있을까 다뒤졌는데 이건 없더군여...-.-;



그래두 올려주시리라 믿구 올립니다^^;



procedure TfrmAttend.btnSaveClick(Sender: TObject);

var memoChar : array[1..100] of char;

i,hap : integer;

begin

for i := 1 to length(moEtc.Lines.Text)-1 do

begin

memoChar[i] := moEtc.Lines.Text[i];

if not (StrToIntDef(memoChar[i],0) = 0) then

begin

hap := hap + strToint(memoChar[i]);

end;

end;

edBmark.Text := intTostr(hap);

end;



저장버튼을 누르면 moEtc(DBMemo)에서 숫자만 더해서 edBmark(Editbox)에다가 결과를 뿌려주려고 하거든여..



한자리 숫자끼리는 잘 더해지는데 10이나 15같은.....두자리 이상은 인식을 못하는거 같아요.



10같은 경우는 결과가 1로 15같은 경우는 결과가 6으로 나와서여...



두자리가 안되니깐 세자리두 안되는건 당연하구여..



비두 추적추적오구..기분두 꿀꿀하구...그렇네여...



앙~~~~~

3  COMMENTS
  • Profile
    Lee 2001.07.04 01:31
    제가 프로젝트 개발시 쓰는 방법인데 제 나름대ㅔ로 편하더군요...

    문제는 스티링모드를 Double 또는 Integer형태로 바꿔주는

    function을 만들어서 쓴 겁니다.



    function GET_FLOAT(PSTRING:String):Integer;

    begin

    if........ 자기가 걸러내고 싶은 조건들....



    //위 조건이 충족되면

    Result := StrToInt(PSTRING);

    end;



    procedure TfrmAttend.btnSaveClick(Sender: TObject);

    var hap : integer;

    begin

    for i := 1 to length(moEtc.Lines.Text)-1 do

    hap := hap + GET_FLOAT(moEtc.Lines.Text[i]);

    edBmark.Text := intTostr(hap);

    end;



    음 좋은 방버이러ㅏ고 할 순 없지만 function에서

    모든 가능한 조건으로 처리하면 Double이나 Integer로 바꿀때

    생겨나는 오류를 막을 수 있고 전역으로 설정한다면

    모든 프로그램에서 신경쓰지 않고 숫자형으로 전황할 수 있어 편하더군요.



    이상 허접방법입니다. ^^





    blackjewel wrote:

    > 혹시...답변이 있을까 다뒤졌는데 이건 없더군여...-.-;

    >

    > 그래두 올려주시리라 믿구 올립니다^^;

    >

    > procedure TfrmAttend.btnSaveClick(Sender: TObject);

    > var memoChar : array[1..100] of char;

    > i,hap : integer;

    > begin

    > for i := 1 to length(moEtc.Lines.Text)-1 do

    > begin

    > memoChar[i] := moEtc.Lines.Text[i];

    > if not (StrToIntDef(memoChar[i],0) = 0) then

    > begin

    > hap := hap + strToint(memoChar[i]);

    > end;

    > end;

    > edBmark.Text := intTostr(hap);

    > end;

    >

    > 저장버튼을 누르면 moEtc(DBMemo)에서 숫자만 더해서 edBmark(Editbox)에다가 결과를 뿌려주려고 하거든여..

    >

    > 한자리 숫자끼리는 잘 더해지는데 10이나 15같은.....두자리 이상은 인식을 못하는거 같아요.

    >

    > 10같은 경우는 결과가 1로 15같은 경우는 결과가 6으로 나와서여...

    >

    > 두자리가 안되니깐 세자리두 안되는건 당연하구여..

    >

    > 비두 추적추적오구..기분두 꿀꿀하구...그렇네여...

    >

    > 앙~~~~~

  • Profile
    강호규 2001.07.04 01:29
    blackjewel wrote:

    > 혹시...답변이 있을까 다뒤졌는데 이건 없더군여...-.-;

    >

    > 그래두 올려주시리라 믿구 올립니다^^;

    >

    > procedure TfrmAttend.btnSaveClick(Sender: TObject);

    > var memoChar : array[1..100] of char;

    > i,hap : integer;

    > begin

    > for i := 1 to length(moEtc.Lines.Text)-1 do

    > begin

    > memoChar[i] := moEtc.Lines.Text[i];

    > if not (StrToIntDef(memoChar[i],0) = 0) then

    > begin

    > hap := hap + strToint(memoChar[i]);

    > end;

    > end;

    > edBmark.Text := intTostr(hap);

    > end;

    >

    > 저장버튼을 누르면 moEtc(DBMemo)에서 숫자만 더해서 edBmark(Editbox)에다가 결과를 뿌려주려고 하거든여..

    >

    > 한자리 숫자끼리는 잘 더해지는데 10이나 15같은.....두자리 이상은 인식을 못하는거 같아요.

    >

    > 10같은 경우는 결과가 1로 15같은 경우는 결과가 6으로 나와서여...

    >

    > 두자리가 안되니깐 세자리두 안되는건 당연하구여..

    >

    > 비두 추적추적오구..기분두 꿀꿀하구...그렇네여...

    >

    > 앙~~~~~

    --------------------------------------------------------------------------------

    이렇게 하시면 됩니다.

    위에서 보시면 지적하신대로

    연속적인 숫자가 나왔을 경우를 처리를 하지 않았기 때문에

    당연 정확한 값이 나올 수 없겠죠?



    아래는 간단히 샘플로 해본 것입니다.

    최적화는 시키지 못했구요

    동작은 잘합니다.

    각라인의 끝과 다음라인의 처음에 있는 연속된 숫자는 별개로 처리하였습니다.

    예를 들여 메모에

    adf10

    20adsf

    는 10,20 으로 2개의 숫자로 보았구요(1020 이 아니라)

    만일 같이 1020으로 처리하고 싶다면

    아래에 라인에 대한 부분을 보강하면 될 것 같습니다.







    procedure TForm1.Button1Click(Sender: TObject);

    var

    i, Sum: Integer;

    TmpStr, NumStr, CurChar: String;

    begin

    TmpStr := Memo1.Lines.Text;

    Sum := 0;

    NumStr := '';



    while Length(TmpStr) > 0 do begin

    CurChar := Copy(TmpStr,1,1);

    if StrToIntDef(CurChar,1004)<>1004 then NumStr := NumStr + CurChar

    else begin

    if StrToIntDef(NumStr,1004)<>1004 then begin

    Sum := Sum + StrToInt(NumStr);

    NumStr := '';

    end;

    end;

    TmpStr := Copy(TmpStr,2,Length(TmpStr)-1);

    end;



    Button1.Caption := IntToStr(sum);

    end;





  • Profile
    blackjewel 2001.07.04 03:14
    강호규 wrote:

    > blackjewel wrote:

    > > 혹시...답변이 있을까 다뒤졌는데 이건 없더군여...-.-;

    > >

    > > 그래두 올려주시리라 믿구 올립니다^^;

    > >

    > > procedure TfrmAttend.btnSaveClick(Sender: TObject);

    > > var memoChar : array[1..100] of char;

    > > i,hap : integer;

    > > begin

    > > for i := 1 to length(moEtc.Lines.Text)-1 do

    > > begin

    > > memoChar[i] := moEtc.Lines.Text[i];

    > > if not (StrToIntDef(memoChar[i],0) = 0) then

    > > begin

    > > hap := hap + strToint(memoChar[i]);

    > > end;

    > > end;

    > > edBmark.Text := intTostr(hap);

    > > end;

    > >

    > > 저장버튼을 누르면 moEtc(DBMemo)에서 숫자만 더해서 edBmark(Editbox)에다가 결과를 뿌려주려고 하거든여..

    > >

    > > 한자리 숫자끼리는 잘 더해지는데 10이나 15같은.....두자리 이상은 인식을 못하는거 같아요.

    > >

    > > 10같은 경우는 결과가 1로 15같은 경우는 결과가 6으로 나와서여...

    > >

    > > 두자리가 안되니깐 세자리두 안되는건 당연하구여..

    > >

    > > 비두 추적추적오구..기분두 꿀꿀하구...그렇네여...

    > >

    > > 앙~~~~~

    > --------------------------------------------------------------------------------

    > 이렇게 하시면 됩니다.

    > 위에서 보시면 지적하신대로

    > 연속적인 숫자가 나왔을 경우를 처리를 하지 않았기 때문에

    > 당연 정확한 값이 나올 수 없겠죠?

    >

    > 아래는 간단히 샘플로 해본 것입니다.

    > 최적화는 시키지 못했구요

    > 동작은 잘합니다.

    > 각라인의 끝과 다음라인의 처음에 있는 연속된 숫자는 별개로 처리하였습니다.

    > 예를 들여 메모에

    > adf10

    > 20adsf

    > 는 10,20 으로 2개의 숫자로 보았구요(1020 이 아니라)

    > 만일 같이 1020으로 처리하고 싶다면

    > 아래에 라인에 대한 부분을 보강하면 될 것 같습니다.

    >

    >

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > i, Sum: Integer;

    > TmpStr, NumStr, CurChar: String;

    > begin

    > TmpStr := Memo1.Lines.Text;

    > Sum := 0;

    > NumStr := '';

    >

    > while Length(TmpStr) > 0 do begin

    > CurChar := Copy(TmpStr,1,1);

    > if StrToIntDef(CurChar,1004)<>1004 then NumStr := NumStr + CurChar

    > else begin

    > if StrToIntDef(NumStr,1004)<>1004 then begin

    > Sum := Sum + StrToInt(NumStr);

    > NumStr := '';

    > end;

    > end;

    > TmpStr := Copy(TmpStr,2,Length(TmpStr)-1);

    > end;

    >

    > Button1.Caption := IntToStr(sum);

    > end;

    >

    >



    답변 감사드려여^^;



    그런데 제가 실행해 본 바로는 숫자 0을 숫자로 인식 못하는걸여...



    showmessage로 숫자만 뿌려봤는데 0은 나오지를 않네여...



    TmpStr := moEtc.Lines.Text;

    hap := 0;

    NumStr := '';

    while Length(TmpStr) > 0 do begin

    CurChar := Copy(TmpStr,1,1);

    if StrToIntDef(CurChar,0)<>0 then

    NumStr := NumStr + CurChar

    else begin

    **********if CurChar = '0' then NumStr := NumStr + CurChar; *************

    if StrToIntDef(NumStr,0)<>0 then begin hap := hap + StrToInt(NumStr);

    NumStr := '';

    end;

    end;

    TmpStr := Copy(TmpStr,2,Length(TmpStr)-1);

    end;

    edBmark.Text := intTostr(hap);



    그래서 요렇게 했더니 다행히 되네여...^^



    감사합니당~~



    존하루 되세여......앙~~