카테고리 없음

Non Unicode system에서 받은 한글 파일 작업시

유부사모 2017. 11. 21. 15:58

Non Unicode System에서 한글(2Byte 한글)이 포함된 Text File을

Unicode SAP System에서 읽을때 한글을 1Byte 씩 읽게되면 문제가 발생하는데

이를 해결하는 방법



DATA: BEGIN OF  GT_DATA OCCURS 0,

                PONO(6) TYPE C,

                ZEVT_DTTM(19) TYPE C,

                ZBFEVT(3) TYPE C,

                ZAFEVT(3) TYPE C,

                EVT(3) TYPE C,

                ZFAULT(630) TYPE C,

END OF GT_DATA.



DATA: BEGIN OF GT_REC OCCURS 0,

  TDATA(999)    TYPE C,

END OF GT_REC.


DATA:GT_TEST LIKE TABLE OF GT_REC WITH HEADER LINE.


DATA: W_DSN(500)      TYPE C,

      W_FILEPATH(500) TYPE C,

      W_REC(999)      TYPE C,

      W_CNV(999)      TYPE C.




FORM DATA_UPLOAD USING U_FILENM.


  DATA: LW_FILENM TYPE STRING.

  DATA: W_STR TYPE STRING.

  DATA: CP_TAB  TYPE         NLS_LANGU_CP_TAB,

        L_WA    TYPE         NLS_LANGU_CP_LINE,

        CC      TYPE REF TO  CL_NLS_STRUC_CONTAINER.


  DATA:  BEGIN OF HEAD OCCURS 0,

         H_STR(1056),

  END OF HEAD.


  W_DSN = U_FILENM.


  PERFORM OPEN_DATASET.


  IF G_ERR2 IS INITIAL.

    PERFORM READ_DATASET.

  ENDIF.


  PERFORM CLOSE_DATASET.


  IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO

            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.


ENDFORM.                    " DATA_UPLOAD




FORM OPEN_DATASET .


  DATA MESS TYPE STRING.

  CLEAR : G_ERR2.


  OPEN DATASET W_DSN FOR INPUT IN LEGACY TEXT MODE CODE PAGE '8500'.


  IF SY-SUBRC = 8.

    MESSAGE S000 WITH 'File not exists'.

    G_ERR2 = 'X'.

    EXIT.

  ENDIF.


  IF SY-SUBRC <> 0.

    MESSAGE S000 WITH 'File not exists'.

    G_ERR2 = 'X'.

    EXIT.

  ENDIF.


ENDFORM.                    " OPEN_DATASET



FORM READ_DATASET .


  DATA:  CP_TAB      TYPE NLS_LANGU_CP_TAB,

         L_WA        TYPE NLS_LANGU_CP_LINE,

         L_CODEPAGE  TYPE CPCODEPAGE,

         CC          TYPE REF TO CL_NLS_STRUC_CONTAINER,

         L_BUF(999)  TYPE C.


  CLEAR : GT_DATA, GT_DATA[].


* NON UNICODE(한글 2바이트로 인식)

  DO.

    CLEAR W_REC.

    READ DATASET W_DSN INTO W_REC.

    IF SY-SUBRC <> 0.

      EXIT.

    ENDIF.


    GT_REC = W_REC.

    APPEND GT_REC.

  ENDDO.


  LOOP AT GT_REC.

    L_WA-LANGU = '3'.

    L_WA-CODEPAGE = '8500'.

    INSERT L_WA INTO TABLE CP_TAB.

    CC = CL_NLS_STRUC_CONTAINER=>CREATE( CP_TAB = CP_TAB ).

    TRY.

        CALL METHOD CC->STRUC_TO_CONT

          EXPORTING

            STRUC = GT_REC

            LANGU = '3'

          IMPORTING

            CONT  = GT_TEST-TDATA.

      CATCH CX_SY_CONVERSION_CODEPAGE .

      CATCH CX_PARAMETER_INVALID_RANGE .

    ENDTRY.


    CC = CL_NLS_STRUC_CONTAINER=>CREATE( CP_TAB = CP_TAB ).

    TRY.

        CALL METHOD CC->CONT_TO_STRUC

          EXPORTING

            CONT  = GT_TEST-TDATA

            LANGU = '3'

          IMPORTING

            STRUC = GT_DATA.

      CATCH CX_SY_CONVERSION_CODEPAGE .

      CATCH CX_PARAMETER_INVALID_RANGE .

    ENDTRY.


    APPEND GT_DATA.

  ENDLOOP.



ENDFORM.                    " READ_DATASET