돌아가기만 하면 되지?! 라는 마음으로 좀 지저분하게 짜 본 코드..
월요병 씨게 와서 앉아 있는게 헬이다
이번에 배운 것은 메소드에서 fail 뱉을 때
raise exception type ~~.
구문 사용하는 것!!
https://exercism.org/tracks/abap/exercises/phone-number
Phone Number in ABAP on Exercism
Can you solve Phone Number in ABAP? Improve your ABAP skills with support from our world-class team of mentors.
exercism.org
내가 만든 코드
CLASS zcl_phone_number DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
data : len type i.
METHODS clean
IMPORTING
number TYPE string
RETURNING
VALUE(result) TYPE string
RAISING
cx_parameter_invalid.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_phone_number IMPLEMENTATION.
METHOD clean.
" add your code here
condense number.
REPLACE ALL OCCURRENCES OF '-' IN number WITH ''.
REPLACE ALL OCCURRENCES OF ` ` IN number WITH ''.
REPLACE ALL OCCURRENCES OF '.' IN number WITH ''.
REPLACE '(' IN number WITH ''.
REPLACE ')' IN number WITH ''.
REPLACE '+1' IN number WITH ''.
len = strlen( number ).
if len > 10.
if number+0(1) = '1'.
REPLACE FIRST OCCURRENCE OF '1' IN number WITH ''.
endif.
len = strlen( number ).
if len >= 11.
raise exception type cx_parameter_invalid.
else.
if number+0(1) = '1' or number+0(1) = '0'
or number+3(1) = '1' or number+3(1) = '0'.
raise exception type cx_parameter_invalid.
endif.
endif.
elseif len < 10.
raise exception type cx_parameter_invalid.
elseif len = 10.
if number+0(1) = '1' or number+0(1) = '0'
or number+3(1) = '1' or number+3(1) = '0'.
raise exception type cx_parameter_invalid.
endif.
endif.
if len = 10.
result = number.
else.
raise exception type cx_parameter_invalid.
endif.
ENDMETHOD.
ENDCLASS.
다른 사람의 좋은 코드
METHOD clean.
result = replace( val = number
regex = |[^0-9]| "0-9까지 숫자를 제외한 다른 글자들. ^은 문자열 시작을 의미하는 예약어라고 함
with = `` "빈칸으로 바꾸자
occ = 0 ). "양수 : 발생 횟수 왼쪽부터 계산 / 음수 : 발생 횟수 오른쪽부터 계산
IF strlen( result ) = 11 AND result+0(1) = '1'.
result = result+1.
ENDIF.
IF strlen( result ) <> 10.
RAISE EXCEPTION TYPE cx_parameter_invalid.
ENDIF.
IF result+0(1) <= '1' OR result+3(1) <= '1'.
RAISE EXCEPTION TYPE cx_parameter_invalid.
ENDIF.
ENDMETHOD.
SAP에서 로컬테스트할때 사용하는 코드
CLASS zcl_phone_number DEFINITION
"PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
data : len type i.
METHODS clean
IMPORTING
number TYPE string
RETURNING
VALUE(result) TYPE string
RAISING
cx_parameter_invalid.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_phone_number IMPLEMENTATION.
METHOD clean.
result = replace( val = number
regex = |[^0-9]|
with = ``
occ = 0 ).
IF strlen( result ) = 11 AND result+0(1) = '1'.
result = result+1.
ENDIF.
IF strlen( result ) <> 10.
RAISE EXCEPTION TYPE cx_parameter_invalid.
ENDIF.
IF result+0(1) <= '1' OR result+3(1) <= '1'.
RAISE EXCEPTION TYPE cx_parameter_invalid.
ENDIF.
ENDMETHOD.
ENDCLASS.
DATA go_oref TYPE REF TO zcl_phone_number.
DATA number TYPE string.
DATA result TYPE string.
START-OF-SELECTION.
CREATE OBJECT go_oref.
number = '+1 (013)-995-0253'. "이부분 바꿔가면서 테스트 해보기
CALL METHOD go_oref->clean( exporting number = number ).