메뉴 건너뛰기

SAP 한국 커뮤니티

사용자에게 입력받은 문장을 몇줄에 걸쳐서 잘라서 표현해야하는데요


일단 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 개념도 잘 이해가 안가고요~


 


고수분들의 도움부탁드립니다.

번호 제목 글쓴이 날짜 조회 수
475 <img src=3.gif>Message에 Len는 최대 몇자리까지 가능한가요? [2] 초보자라네 2010.09.10 3296
» <img src=3.gif>한글깨짐현상에 대해서요. 2바이트 스트링 값이 어떻게 구성되는지도 좀 궁금합니다. [2] 오류제로 2010.02.10 3300
473 <img src=3.gif>패키지(개발클래스)를 통으로 CTS 따려면 어떻게 해야하는지요? [3] 기쁨 2011.01.25 3300
472 <img src=3.gif>ALV에서 한 셀 Editable하게 변경하기.. [4] 은미짱 2011.03.17 3301
471 <img src=2.gif>Factory calendar 기준으로 두 날짜 사이의 일수 계산하기 [1] imgood 2011.01.06 3304
470 <b>[완료]</b>SmartForms 텍스트 에디터 바꾸는법. [4] file JiruMi 2009.01.26 3307
469 [요청]특절 필드에 들어온 value의 자리수를 알려면 어떻게 해야 하나요? [1] 바위 2007.12.28 3312
468 [요청]80문제 덤프 아리송한 문제 문의드립니다. [4] 제슨오 2008.03.21 3312
467 [re] EXCEL(엑셀)을 출력화면으로 하여 INTERNAL TABLE의 데이터를 수정 또는 INSERT할 수 있는 방법의 질문 초보보초보 2007.01.26 3314
466 <b>[완료]</b>SQL문의 성능 향상 질문. [16] 초보보초보 2007.02.07 3315
465 [요청]Write 혹은 Alv할때 소수점과 소수점 아래 영을 출력 아니 하려면 ? [1] Bizzard.Chul 2009.03.17 3315
464 <img src=2.gif>ALV 출력완료후 더블클릭이나 back 버튼 누르면 덤프가 발생되는데 해결방법 좀 알려주세요 [6] Emily S. Kang 2010.07.01 3315
463 <img src=3.gif>ALV에서 특정필드의 중복된 row에 대하여 하나로 겹치기(화면첨부) [3] file Fjohnny 2011.02.08 3321
462 <b>[완료]</b><b>[완료]</b><b>[완료]</b><b>[완료]</b>[re] 메뉴-Program의 서브메뉴인 execute in background를 비활성화 방법? [6] sapjoy 2007.01.10 3324
461 <b>[완료]</b>ALV CLASS에서 MARK 필드 선택 사용법 [3] SAMBATIME 2008.03.02 3324
460 한 배치잡안에 여러개의 프로그램 실행 중 한건이 취소 될경우 자동 배치잡 생성문제 [2] 하얀콩 2007.04.05 3326
459 <b>[완료]</b>두개의 internal table에서 한쪽에 없는 것을 다른 한쪽에 넣는 방법 좀 알려주세요. [5] 행복한외계인 2007.11.26 3326
458 <img src=3.gif>ALV에서의 CHECK BOX 관련 질문입니다. [2] 오오뎅 2010.01.13 3327
457 <img src=2.gif>ABAP Dump 해결 부탁드립니다. (The ABAP/4 Open SQL array insert results in duplicate database records.) [7] file 으컁컁 2010.03.24 3336
456 [요청]Table PS9103을(를) 활성화할 수 없었습니다.. 테이블 오류관련입니다.. 무한반복 2008.06.16 3337