Non Unicode system에서 받은 한글 파일 작업시
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