[ABAP]반각·전각·혼재 체크 Ver1.1(Whether Text is SBC only, DBC only or Mixed)
유니코드 환경에서의 반각·전각 혼합 체크가 됩니다.
이번에는 CL_ABAP_LIST_UTILITIES의 메소드와 STRLEN을 사용하여
문자열의 "반각만""전각만""반각전각혼재"를 체크합니다.
표 1 : 코드에서 사용하는 각 문자 수, 바이트 수 계산 명령 및 방법에 대해
내용
설명
STRLEN
문자 수
DYNAMIC_OUTPUT_LENGTH
입력된 문자의 총 바이트 수
DEFINED_OUTPUT_LENGTH
정의 길이 (CHAR30은 30)
MAXIMUM_OUTPUT_LENGTH
최대 바이트 길이(CHAR30은 30*2바이트로 60)
표 2: 판정 조건
조건
판정
문자 수 = 바이트 수
반각만
문자 수 * 2 = 바이트 수
전각만
상기 이외
반각 전각 혼합
이번 표 2에 있는 체크 로직은, COND를 사용해, 문자수*2의 변수 X를 내부에서 정의해
판정하고, 그대로 CL_DEMO_OUTPUT=>WRITE에 기입한다고 한다,
ABAPDOCU 같은 쓰는 방법으로 썼습니다 (스미마센, 해보고 싶었습니다).
YTEST_SBCDBC_CHECK
REPORT YTEST_SBCDBC_CHECK.
PARAMETERS: P_STR TYPE CHAR30 obligatory.
* 設定値の文字数
DATA(W_STR) = STRLEN( P_STR ). "設定値の文字数
* 設定値のバイト数
DATA(W_DYN) = CL_ABAP_LIST_UTILITIES=>DYNAMIC_OUTPUT_LENGTH( FIELD = P_STR ).
* 設定項目の定義長
*data(W_DEF) = CL_ABAP_LIST_UTILITIES=>DEFINED_OUTPUT_LENGTH( FIELD = P_STR ).
* 設定項目の最大バイト数
*data(W_MAX) = CL_ABAP_LIST_UTILITIES=>MAXIMUM_OUTPUT_LENGTH( FIELD = P_STR ).
CL_DEMO_OUTPUT=>WRITE( |{ P_STR } | ).
CL_DEMO_OUTPUT=>WRITE( | STRLEN { W_STR } | ).
CL_DEMO_OUTPUT=>WRITE( | DYNAMIC { W_DYN } | ).
*CL_DEMO_OUTPUT=>WRITE( | DEFINITION { W_DEF }| ).
*CL_DEMO_OUTPUT=>WRITE( | MAXIMUM { W_MAX }| ).
* 全角半角判定を行い、結果を書き込む
CL_DEMO_OUTPUT=>WRITE(
cond #( LET X = W_STR * 2 in
when w_str = W_DYN then | すべて半角です |
when X = W_DYN then | すべて全角です |
else | 全角と半角が混在しています | ) ).
CL_DEMO_OUTPUT=>DISPLAY( ).
결과 샘플입니다.
이전 코드도 일단 남겨 둡니다 ...
한 문자씩 문자가 반각인지 전각인지 확인하는 방법
zcheck_1byte2byte
REPORT zcheck_1byte2byte.
parameters: p_str type string.
data(CHAR_NUM) = strlen( p_str ).
DO char_num times.
* 文字を1文字づつ取得
data(moji) =
CL_HRPADJP_CHARACTER_UTILITIES=>GET_NTH_CHAR( IV_STRING = p_STR
iv_pos = sy-index ).
data(moji_after) = moji.
* mojiを1バイト分のみとする→半角文字:同文字、全角文字:null
call method CL_HRPADJP_CHARACTER_UTILITIES=>ADJUST_STR_LEN
exporting IV_TAR_LEN = 1
changing CV_TXT = moji_after.
if moji = moji_after.
* 半角
cl_demo_output=>write( | { moji } { moji_after } 半角 | ).
else. "全角
cl_demo_output=>write( | { moji } { moji_after } 全角 | ).
endif.
enddo.
* result display
cl_demo_output=>display( ).
Reference
이 문제에 관하여([ABAP]반각·전각·혼재 체크 Ver1.1(Whether Text is SBC only, DBC only or Mixed)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Go_Ohta/items/a0ed1535a611bd4cd0b4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)