계산 공식을 문자로 받고 값 또한 사용자에게 받아서
등록된 계산 공식에 의해 처리해야하는데 어케 처리를 해야할까여!
이것을 처리하기 위해서 배열을 두개로 처리하고 값과 위치를 저장하는곳을
받아서 처리했는데...
한계가 있더라구여! 방법또한 무식하구여!
이 프로그램의 포인트는 계산 공식이 매번 바뀌수도 있는것입니다.
배열을 KeyInt, KeyValue : Array of Variant; 이케했거든여!
-----------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
StrTmp: String;
CntKN, CntKV: SmallInt;
ArrTmp: Array of String;
KeyInt, KeyValue : Array of Variant;
f1, f2, f3, TxtCnt: SmallInt;
Const varName: Array[0..9] of String = ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
function KeyTaget(Str: String): Boolean;
var f1: SmallInt;
begin
for f1 := 0 to 9 do begin
if Str = varName[f1] then Result := TRUE
else Result := FALSE;
end;
end;
begin
TxtCnt := Length(Edit6.Text);
SetLength(ArrTmp, TxtCnt);
for f1 := 0 to TxtCnt-1 do begin
ArrTmp[f1] := Copy(Edit6.Text, f1+1, 1);
if KeyTaget(ArrTmp[f1]) then KeyInt[f1] := f1+1;
end; //((A+B)*C)
SetLength(KeyValue, 5);
KeyValue[0] := Edit1.Text;
KeyValue[1] := Edit2.Text;
KeyValue[2] := Edit3.Text;
KeyValue[3] := Edit4.Text;
KeyValue[4] := Edit5.Text;
.
.
.
.
.
end;
ㅜㅜ; 하는 중에 어찌해야할지를 몰라서 생각중인데...
혹시나 제가 컨셉을 잘못잡았다면 지적해주세요! 또한 다른 좋은 방법이 있으면
가이드해주셔도 좋구여! ^^;
즐건 하루보네세요!
대단한(???) 꽁수를 하나 말씀드리겠습니다..
제가 인사급여를 작업할때 아주 간단히 했던 꽁수(??) 입니다.
힌트는 일단 공식은 모두 문자,숫자와 괄호, 연산자등으로 나뉘어집니다..
이것이 가장 큰 힌트입니다..
즉, 숫자,괄호,연산자는 일반적으로 계산공식에 쓰는 것이므로..
그냥 사용하게 되지만, 문자때문에 계산식을 완성할 수 없다는 것이죠..
따라서, 문자를 어떻게 처리하면, 그냥 쉽게 이루어질 수 있다는 정설이 나옵니다..
저 같은 경우에 B-Tree를 이용해서 Tree-Node의 말단인 Terminal부터 시작하여
상위Tree로 올라가면서 사용하는 후진검색을 이용했었지만..
개발자가 보기에 너무 복잡하고 어렵게 보였습니다.
이에..
30분 밤낮을(ㅋㅋ 꽁수니까.. 30분) 고민하다가 떠오런 아이디어는
Database(MDB,paradox,oracle 뭐든 상관없음)와
연관된 Query를 사용할때 쓰는 Param이였습니다..
즉, 계산공식의 문자앞에 모두 ':' 문자를 붙여서
Param으로 지정한되
SQL문을 'select 계산공식 from 테이블' 으로 하고(테이블의 Row는 1건만 있어야함)
param을 지정 후 SQL을 실행하여 결과를 가져왔습니다..
약간, 느릴지 몰라도 결과는 보장합니다.
코딩도 보시면 아주 간단하니 쉽게 이해 되구요..
(StrReplace함수, param 문... 으로 끝난다는..)
제가 생각하기에 대단한 꽁수지만,
아닐수도 있겠죠..
꽁수에도 일가견(???)이 있는 착한천사였습니다..
ㅋㅋㅋ