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
Deja un comentario