메뉴 건너뛰기

SAP 한국 커뮤니티

한글 자음 분석해보기.

공백 2011.05.19 12:17 조회 수 : 7256

그냥 이게 어디에 쓰일지는 미지수 입니다만 올려봅니다..ㅎ

원래 한글도 CS나 CP처럼 사용할 수 있는 방법이 있을까라고 생각을 했었는데...

결국 저는 트리에 제품명을 ㄱ~ㄷ, ㄹ~ㅂ, ... 처럼 자음으로 묶을때 사용해보았구요,

그냥 지나가다 보시고 더 쉬운 방법 있으면 저한테도 알려주세요. ^-^a

 

PS. 첨부파일에서는 한글 UNICODE -> HEX 관련 정리해봤습니다.

 


*&---------------------------------------------------------------------*
*& VARIABLES.
*&---------------------------------------------------------------------*
DATA : LV_HEX(4)LV_CHAR.
DATA : LV_INPUT TYPE STRING
       LV_OUTPUT(2).

*&---------------------------------------------------------------------*
*& 문자열 입력 받기.
*&---------------------------------------------------------------------*
CALL FUNCTION 'POPUP_TO_FILL_COMMAND_LINE'
  EXPORTING
    POPUPTITLE   = '첫단어 자음 분석'
    TEXT1        = '원하시는 단어를 입력하세요.'
  IMPORTING
    COMMAND_LINE = LV_INPUT.

*&---------------------------------------------------------------------*
*& 입력 받은 문자열의 자음 분석하기.
*&---------------------------------------------------------------------*
IF LV_INPUT IS NOT INITIAL.

  DATA :  LV_CHECK(4), LV_TEMP.

  "test DATA.
  LV_TEMP = '가'.
  FIELD-SYMBOLS <FS> TYPE X.
  ASSIGN LV_CHAR TO <FS> CASTING.
  LV_CHECK = <FS>.

*-- 입력받은 문자에서 첫번째 단어만 비교합니다.
  LV_CHAR = LV_INPUT+0(1).

  ASSIGN LV_CHAR TO <FS> CASTING.

  LV_HEX = <FS>.

  IF LV_CHECK = '00AC'.

    SHIFT LV_HEX BY 2 PLACES LEFT CIRCULAR.
  ENDIF.


*-- HEX값과 비교합니다.
  IF ( 'AC00' <= LV_HEX AND LV_HEX <= 'B097' ) OR LV_HEX EQ '3131' OR LV_HEX EQ '3132'.
    LV_OUTPUT = 'ㄱ'.
  ELSEIF LV_HEX EQ '3133'.
    LV_OUTPUT = 'ㄳ'.
  ELSEIF ( 'B098' <= LV_HEX AND LV_HEX <= 'B2E3' ) OR LV_HEX EQ '3134'.
    LV_OUTPUT = 'ㄴ'.
  ELSEIF LV_HEX EQ '3135'.
    LV_OUTPUT = 'ㄵ'.
  ELSEIF LV_HEX EQ '3136'.
    LV_OUTPUT = 'ㄶ'.
  ELSEIF ( 'B2E4' <= LV_HEX AND LV_HEX <= 'B77B' ) OR LV_HEX EQ '3137' OR LV_HEX EQ '3138'.
    LV_OUTPUT = 'ㄷ'.
  ELSEIF ( 'B77C' <= LV_HEX AND LV_HEX <= 'B9C7' ) OR LV_HEX EQ '3139'.
    LV_OUTPUT = 'ㄹ'.
  ELSEIF LV_HEX EQ '3140'.
    LV_OUTPUT = 'ㄼ'.
  ELSEIF ( 'B9C8' <= LV_HEX AND LV_HEX <= 'BC13' ) OR LV_HEX EQ '3141'.
    LV_OUTPUT = 'ㅁ'.
  ELSEIF ( 'BC14' <= LV_HEX AND LV_HEX <= 'C0AB' ) OR LV_HEX EQ '3142' OR LV_HEX EQ '3143'.
    LV_OUTPUT = 'ㅂ'.
  ELSEIF LV_HEX EQ '3144'.
    LV_OUTPUT = 'ㅄ'.
  ELSEIF ( 'C0AC' <= LV_HEX AND LV_HEX <= 'C543' ) OR LV_HEX EQ '3145' OR LV_HEX EQ '3146'.
    LV_OUTPUT = 'ㅅ'.
  ELSEIF ( 'C544' <= LV_HEX AND LV_HEX <= 'C78F' ) OR LV_HEX EQ '3147'.
    LV_OUTPUT = 'ㅇ'.
  ELSEIF ( 'C790' <= LV_HEX AND LV_HEX <= 'CC27' ) OR LV_HEX EQ '3148' OR LV_HEX EQ '3149'.
    LV_OUTPUT = 'ㅈ'.
  ELSEIF ( 'CC28' <= LV_HEX AND LV_HEX <= 'CE73' ) OR LV_HEX EQ '314A'.
    LV_OUTPUT = 'ㅊ'.
  ELSEIF ( 'CE74' <= LV_HEX AND LV_HEX <= 'D0BF' ) OR LV_HEX EQ '314B'.
    LV_OUTPUT = 'ㅋ'.
  ELSEIF ( 'D0C0' <= LV_HEX AND LV_HEX <= 'D30B' ) OR LV_HEX EQ '314C'.
    LV_OUTPUT = 'ㅌ'.
  ELSEIF ( 'D30C' <= LV_HEX AND LV_HEX <= 'D557' ) OR LV_HEX EQ '314D'.
    LV_OUTPUT = 'ㅍ'.
  ELSEIF ( 'D558' <= LV_HEX AND LV_HEX <= 'D7A3' ) OR LV_HEX EQ '314E'.
    LV_OUTPUT = 'ㅎ'.
  ENDIF.
ENDIF.

*&---------------------------------------------------------------------*
*& 결과 출력.
*&---------------------------------------------------------------------*
IF LV_OUTPUT IS INITIAL.
  WRITE : LV_INPUT, '은 자음이 들어간 단어가 아니네요'.
ELSE.
  WRITE : LV_OUTPUT, '로 시작합니다. HEX =', LV_HEX.
ENDIF.