Macros de alpha y numéricas

Macros Alpha

A la hora de usar la función alpha para meter y quitar ceros siempre confundo las funciones. Además, quedan feo en medio del código. Estas macros facilitan la labor.

*       _       _
*  __ _| |_ __ | |__   __ _
* / _` | | '_ \| '_ \ / _` |
*| (_| | | |_) | | | | (_| |
* \__,_|_| .__/|_| |_|\__,_|
*        |_|
* pone y quita ceros, en plan exit de campo alpha: sólo con variables
*
*  DATA alfa(3) VALUE '3'.
*  vc_ponceros alfa. WRITE alfa.
*  vc_quitaceros alfa. WRITE alfa.

*alpha
***********************************************************************
DEFINE vc_ponceros.
  call function 'CONVERSION_EXIT_ALPHA_INPUT'
    exporting
      input  = &1
    importing
      output = &1.
END-OF-DEFINITION.

DEFINE vc_quitaceros.
  call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
    exporting
      input  = &1
    importing
      output = &1.
END-OF-DEFINITION.

Macros numéricas

En ABAP no hay un método isNaN() como en javascript: ya es hora de que lo haya.

ABAP tampoco tiene Math.random() o equivalente, así que he creado uno por si algún día se necesita.

Por último, a veces el WRITE de ABAP insiste en poner el signo menos del número a la derecha: pues macro para ponerlo a la izquierda.

*                          _      _
* _ __  _   _ _ __ ___   _// _ __(_) ___ ___
*| '_ \| | | | '_ ` _ \ / _ \ '__| |/ __| _ \
*| | | | |_| | | | | | |  __/ |  | | (__ (_) |
*|_| |_|\__,_|_| |_| |_|\___|_|  |_|\___|___/
*
* VC_ISNUMBER cambia sy-subrc en función del parámetro
*  vc_isnumber ' 100'. write sy-subrc. "0 es número
*  vc_isnumber ' 1.4'. write sy-subrc. "1 es número con decimales
*  vc_isnumber 'hola'. write sy-subrc. "2 no es número

* VC_RANDOMIZE devuelve número €[0,1) en la variable float vc_random
*  DO 65000 TIMES.
*    vc_randomize.
*    WRITE:/ vc_random.
*  ENDDO.

* VC_MINUS2LEFT pone el signo menos de un número negativo a la izq.
*  después de realizar un WRITE TO de integer a char
*  justifica valores a la derecha, eliminando espacio al final
*  DATA n TYPE i VALUE '-123'. DATA t(10).
*  WRITE n TO t.
*  WRITE / t. vc_minus2left t. WRITE / t. "123- >>> -123

*numérico
***********************************************************************
DEFINE vc_isnumber.
  if &1 co ' 0123456789'.
    sy-subrc = 0.
  else.
    if &1 co ' 0123456789.,'.
      sy-subrc = 1.
    else.
      sy-subrc = 2.
    endif.
  endif.
END-OF-DEFINITION.

DATA vc_random TYPE float.

DEFINE vc_randomize.
  vc_random = vc_random +
    ( sy-uzeit + sy-datum + sy-tabix + sy-index ) / 39916801. "primo
  vc_random = abs( vc_random ) mod 1.
  vc_random = ( 100 * log( vc_random ) ) mod 1.
END-OF-DEFINITION.

DEFINE vc_minus2left.
  search &1 for '-'.
  if sy-subrc = 0.
    translate &1 using '- '.
    concatenate '-' &1 into &1.
    condense &1 no-gaps.
  endif.
  write &1 to &1 right-justified.
END-OF-DEFINITION.

Shameless self-promotion

Las letras grandotas están hechas con http://ascii.cranf.net

Publicado en: SAP Sin comentarios ▼

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

[c] Alberto Viñuela Miranda / Cranfcom 2013-2014

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.