로마숫자(Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ...)거나 한글(가,나,다,라,마...) 또는 영어자모(A,B,C,D,E...)로 순번을 출력해야 되는데...
뾰족한 수가 없네요 ...
아시는 분 있으면 답변 부탁드립니다.
감사합니다.
댓글 4
-
Risky
2010.09.15 02:46
-
버미!
2010.09.15 18:09
정 펑션이 없으면 순번/Lang/Data로 해서 테이블 만들어서 사용하심이... -
맑은하늘
2010.09.15 18:52
그냥 상수로 선언해서 지정된 문자를 가져오게끔 구현해봤습니다.
참고해보세요. 도움이 되길 바랍니다.
[소스코드]
CONSTANTS : CO_ROME TYPE C LENGTH 10 VALUE 'ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ',
CO_KOR TYPE C LENGTH 14 VALUE '가나다라마바사아자차카타파하',
CO_ABC_U TYPE C LENGTH 26 VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
CO_ABC_D TYPE C LENGTH 26 VALUE 'abcdefghijklmnopqrstuvwxyz'.
DATA LV_CHAR.
DATA LV_CONSTANT TYPE STRING.
PARAMETERS : P_ROME RADIOBUTTON GROUP GR1 USER-COMMAND ZZZZ,
P_KOR RADIOBUTTON GROUP GR1,
P_ABC_U RADIOBUTTON GROUP GR1,
P_ABC_D RADIOBUTTON GROUP GR1.
SELECTION-SCREEN ULINE.
PARAMETERS P_POS TYPE I.
AT SELECTION-SCREEN.
CASE 'X'.
WHEN P_ROME. LV_CONSTANT = 'CO_ROME'.
WHEN P_KOR. LV_CONSTANT = 'CO_KOR'.
WHEN P_ABC_U. LV_CONSTANT = 'CO_ABC_U'.
WHEN P_ABC_D. LV_CONSTANT = 'CO_ABC_D'.
ENDCASE.
START-OF-SELECTION.
PERFORM GET_CHAR_TO_POS USING LV_CONSTANT P_POS
CHANGING LV_CHAR.
IF LV_CHAR IS NOT INITIAL.
MESSAGE S208(00) WITH LV_CHAR.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_char_to_pos
*&---------------------------------------------------------------------*
FORM GET_CHAR_TO_POS USING US_CONSTANT TYPE ANY
US_POS TYPE ANY
CHANGING CH_RESULT TYPE ANY.
DATA LDREF TYPE REF TO DATA.
DATA LV_INDEX TYPE I.
DATA LV_STRLEN TYPE I.
FIELD-SYMBOLS : <LFS_CHAR> TYPE ANY,
<LFS_CONSTANT> TYPE ANY.
CHECK US_POS IS NOT INITIAL.
ASSIGN (US_CONSTANT) TO <LFS_CONSTANT>.
LV_STRLEN = STRLEN( <LFS_CONSTANT> ).
IF LV_STRLEN < US_POS.
CLEAR CH_RESULT.
MESSAGE S398(00) WITH <LFS_CONSTANT> '에 대한'
US_POS '번째 값이 없습니다'.
EXIT.
ENDIF.
LV_INDEX = US_POS - 1.
GET REFERENCE OF <LFS_CONSTANT>+LV_INDEX(1) INTO LDREF.
ASSIGN LDREF->* TO <LFS_CHAR>.
CH_RESULT = <LFS_CHAR>.
ENDFORM. "get_char_to_pos
-
엉큼고냥이
2010.09.15 19:54
와우~ 이런 방법들도 있었네요 ... 세분 모두 너무 감사드립니다. 큰 도움이 되었습니다.
함수는 잘 모르겠고요, 영어자모라면 참조해 보세요.
data lv_i type i VALUE -1.
do 26 times.
lv_i = lv_i + 1.
write:/ sy-abcde+lv_i(1).
enddo.