2010年6月24日

ABAP List在Unicode環境輸出中文問題

不多說,直接看程式碼

*&---------------------------------------------------------------------*
*& Include ZINCL_OUTPUT
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Macro M_STROUT
*&---------------------------------------------------------------------*
* 參考 Form OUTPUT_STR
*----------------------------------------------------------------------*
DEFINE M_STROUT.
PERFORM OUTPUT_STR USING &1 &2 &3 &4.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Form OUTPUT_STR
*&---------------------------------------------------------------------*
* 將輸出資料(DATA1)輸出到目標(STR1)的特定位置(POS)
*----------------------------------------------------------------------*
* -->STR1 來源及輸出目標
* -->DATA1 輸出資料
* -->POS 預計位置
* -->LEN 預計長度, 輸入0則以實際長度顯示
*----------------------------------------------------------------------*
FORM OUTPUT_STR USING STR1 DATA1 POS LEN.
DATA : RET_POS TYPE I.
DATA : LEN1 TYPE I.

IF LEN = 0.
LEN1 = CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( DATA1 ).
ELSE.
LEN1 = LEN.
ENDIF.
PERFORM GET_OUTPUT_POS USING STR1 POS RET_POS.
WRITE DATA1 TO STR1+RET_POS(LEN1).
ENDFORM. "OUTPUT_STR
*&---------------------------------------------------------------------*
*& Form GET_OUTPUT_POS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->STR1 來源字串
* -->POS 預估輸出位置
* -->RET_POS 實際輸出位置
*----------------------------------------------------------------------*
FORM GET_OUTPUT_POS USING STR1
POS
RET_POS.
DATA : LEN1 TYPE I,
LEN2 TYPE I.
DATA : L_STR(1024) TYPE C.

L_STR = STR1+0(POS).
LEN1 = STRLEN( L_STR ).
LEN2 = CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( L_STR ).
RET_POS = POS - LEN2 + LEN1.
ENDFORM. "GET_OUTPUT_POS