메뉴 건너뛰기

SAP 한국 커뮤니티



ABAP [Selection Screen]에 대한 고찰01_Macro첨부

문바이 2011.05.13 11:37 조회 수 : 44069 추천:1

앞선글에 이어쓸려고 하였으나 오류가 발생하여 불가피 하게 글을 나누었습니다.(죄송합니다.)

 

앞선글에서 사용할

2진수를 10진수로

10진수를 2진수로 변환하는

 

Macro를 만들어 보았습니다.

 

 

 

define MDEC2BIN.
* Decimal To Binary.
* &1 AS integer : 2진수로 돌려줄 길이를 알려준다.
* &2 AS integer : 10진수 값을지정한다. [Source]
* &3 AS String  : 10진수 2진수로 변환한 값을 알려준다. [Result]

  DATA : mlv_i1  type i,
         mlv_i2  type i,
         mlv_i3  type i,
         mlv_i4  type i,
         mlv_i5  type i,
         mlv_p1  type p DECIMALS 1,
         mlv_c1  type c,

         mlv_i6  type i.

  &3 = ''.

  mlv_i1 = &2.

  while 1 = 1.
    mlv_i2 = mlv_i1 mod 2.
    mlv_c1 = mlv_i2.
    CONDENSE mlv_c1.

    mlv_p1 =  mlv_i1 / 2 .
    mlv_i3 =  floor( mlv_p1 ).

    CONCATENATE mlv_c1 &3 into &3.
    if mlv_p1 < 1 .
      exit.
    else.
      mlv_i1 = mlv_i3.
    endif.

  ENDwhile.

  mlv_i1 = strlen( &3 ).
  mlv_i1 = &1 - mlv_i1.

  do mlv_i1 times.
    CONCATENATE '0' &3 into &3.
  enddo.

end-OF-DEFINITION.


 

 

 

 


DEFINE MBIN2DEC.
  DATA : nlv_i1  type i,
         nlv_i2  type i,
         nlv_i3  type i,
         nlv_i4  type i,
         nlv_i5  type i,
         nlv_c1 type c.

  CONDENSE &1.
  nlv_i1 = strlen( &1 ).
  nlv_i2 = nlv_i1.

  &2 = 0.
  do nlv_i1 times.
    nlv_i3 = nlv_i2 - sy-index.
    nlv_c1 = &1+nlv_i3(1).

    nlv_i4 = nlv_c1.

    nlv_i5 = sy-index - 1.
    nlv_i5 = nlv_i4 * ( 2 ** nlv_i5 ).
    &2 = &2 + nlv_i5.

  ENDdo.


END-OF-DEFINITION.