사용자에게 입력받은 문장을 몇줄에 걸쳐서 잘라서 표현해야하는데요
일단 40바이트씩 잘라서 줄을 넣으려고 하는데
한글이 2바이트다보니 40바이트와 41바이트 사이에 끼이면 표현이 안되더군요.(참고로 스마트폼에 윈도우 밑에 템플릿만들고 텍스트에 넣으려고 합니다)
그래서
if ( ls_zsret1000-text_xl+40(2) >= '가' and ls_zsret1000-text_xl+40(2) <= '힣' )
or ls_zsret1000-text_xl+40(2) = ''.
endif.
요런식으로 해당 2바이트가 한글이 아닌경우에 넣으려는 변수에 1바이트 추가해서 완전한 한글을 만들어서 보여주려
했습니다.
그런데 이런,
왠일인지 39~40까지 문자를 디버깅해서 보니 값이 '낳' 요런식으로 요상하게 들어가있는것입니다.
아마도 양쪽에 있는 값을 어떻게 반씩 물어오다보니 그렇게 변한듯한데 아무튼 낳 요런식으로 들어가다보니
위에 로직에 포함되서 1바이트 추가가 안되는겁니다.
휴~
그래서 어디서 요런 로직을 찾았습니다.
2Byte String은 MSB가 '1'로 Setting되어 두개의 Byte가 Pair를 이룬다는
원칙을 기반으로 한다는 펑션이지요.
그런데 이 펑션이 좀 완전치가 못한거 같아서요.
혹시 아시는 분 없으신가요. 또는 위와 같은 문제를 해결해보신분이요~
FUNCTION CORRECT_2BYTES_STR.
*"----------------------------------------------------------------------
*"*"로컬인터페이스:
*" IMPORTING
*" VALUE(I_STR) TYPE C
*" EXPORTING
*" VALUE(O_STR) TYPE C
*"----------------------------------------------------------------------
*-----------------------------------------------------------------------
* Data Declaration
*-----------------------------------------------------------------------
DATA: STA TYPE I, " HEXA로 읽을위치
POS TYPE I, " Space로 조정할 위치
FLG, " 현재 2Byte Pair 상태
LEN TYPE I. " Input String 길이
FIELD-SYMBOLS: , " Input String의 Hexa Value
TYPE X. " 비교할 1byte Charater의 Hexa값
*-----------------------------------------------------------------------
* Main Procedure of Function
*-----------------------------------------------------------------------
O_STR = I_STR.
*--- Input String이 없으면 그냥 Return
LEN = STRLEN( I_STR ).
IF LEN = 0.
EXIT.
ENDIF.
*--- Correction 시작
ASSIGN I_STR TO TYPE 'X'.
CLEAR: STA, POS, FLG.
DO LEN TIMES.
STA = SY-INDEX - 1.
ASSIGN +STA(1) TO .
IF >= '80'. " 2Byte Character인지 Check: MSB가 '1'
IF FLG = SPACE.
FLG = 'X'. " 2Byte문자의 첫번째 Byte임: 시작
ELSE.
FLG = SPACE. " 2Byte문자의 두번째 Byte이고, 정상상태: 종료
ENDIF.
ELSE. " 1Byte Character임
IF FLG = 'X'. " 바로 앞의 Byte가 2Byte문자의 첫번째Byte였음.
FLG = SPACE. " 비정상으로 짤려진 2Byte문자을 Space로 변환
POS = STA - 1.
O_STR+POS(1) = SPACE. " Correction
ENDIF.
ENDIF.
ENDDO.
IF FLG = 'X'. " 마지막 문자가 짤려진 2Byte문자인지 Check
O_STR+STA(1) = SPACE. " Correct
ENDIF.
ENDFUNCTION.
데이타 정의가 좀 잘 안되있는지 분석도 잘안되네용.
MSB 개념도 잘 이해가 안가고요~
고수분들의 도움부탁드립니다.