DATA: W TYPE P DECIMALS 0,
H TYPE P DECIMALS 0,
D TYPE P DECIMALS 0.
DATA: LV_TEST(20).
W = 600.
H = 572.
D = 570.
LV_TEST = 'w - d'.
이렇게 되어있다고 할 때 LV_TEST에 저장된 수식을 사용해서 600 - 570인 30을 출력하려면 어떻게 해야할까요?
수식은 고정돼있지 않습니다
LV_TEST = 'w - h + d' 가 될 수도 있고 LV_TEST = 'w - h * d' 가 될 수도 있습니다
FUNCTION 'EVAL_FORMULA' 를 써보려고 했는데 이건 단순히 숫자와 부호로만 저장된 문자열을 계산해주네요
가변적인 수식을 변수를 사용해 계산하려면 어떻게 해야 할까요?
댓글 6
-
버미!
2010.04.26 23:45
-
진현태
2010.04.27 00:16
REPLACE ALL OCCURRENCES OF 구문으로
'W', 'H', 'D' 의 값을 숫자로 치환 해주고 FUNCTION 'EVAL_FORMULA'을 쓰시면 될것 같네요 ㅎㅎ.
-
덩콘
2010.04.27 02:17
버미님/
질문 이해를 잘못하신듯;
lv_test = 'w-d' 이렇게 들어갑니다
lv_test에 수식 그 자체가 들어가는거죠
진현태님/
replace쓰려니 field-symbol이 안먹네요 ㅎㅎ
w h d 의 값이 고정된게 아니라서요
-
jj
2010.04.27 14:16
변수명이 꼭 lexical 하게 고정되어야 한다는 전제가 없다면 아래 프로그램처럼 하면 안될까요?
사용할 변수의 이름과 값을 SELECT-OPTION에 순서대로 넣고 FORMULA를 정의하면
결과를 계산해서 보여주도록 만들어 봤습니다.
물론 RTTI를 쓰고 선언부를 좀 손보면 원하시는 형태로 가능은 하겠지만 왠지 배보다 배꼽이 큰일 일 것 같군요.
-
페리
2010.04.27 17:23
진현태님 말대로 하면 될듯한데요 W, H, D 의 타입을 케릭터로 주시면 치환시에 변수로도 치환이 가능합니다.
예를들면..
DATA: W(10) TYPE C,
H(10) TYPE C,
D(10) TYPE C.
DATA: LV_TEST(40).
DATA: LV_RESULT TYPE I.
W = '600'.
H = '572'.
D = '570'.
LV_TEST = ' W - H '.
REPLACE ALL OCCURRENCES OF REGEX 'W' IN LV_TEST WITH W.
REPLACE ALL OCCURRENCES OF REGEX 'H' IN LV_TEST WITH H.
REPLACE ALL OCCURRENCES OF REGEX 'D' IN LV_TEST WITH D.
CALL FUNCTION 'EVAL_FORMULA'
EXPORTING
FORMULA = LV_TEST
IMPORTING
VALUE = LV_RESULT.
WRITE:/ LV_RESULT.
이렇게요.
-
덩콘
2010.04.27 20:14
JJ님/ 프로그램도 만들어 주시고 감사합니다
진현태님/ 페리님/ 이 간단한걸 왜 field-symbol을 쓰려고 생각했는지;;ㅋㅋ 잘해결했습니다
DATA: w TYPE p DECIMALS 0,
h TYPE p DECIMALS 0,
d TYPE p DECIMALS 0.
DATA: lv_test(20).
w = 600.
h = 572.
d = 570.
lv_test = w - d.
condense lv_test.
WRITE:/ 'Result : ', lv_test.