PDA

Ver la Versión Completa : ¿Qué se os ocurre?


vic3
20/06/17, 07:21:56
Hola, a ver que se os ocurre para esto. Imaginaos que tengo una serie de variables, todas de tipo STRING con estos valores recogidos (inventados para el ejemplo):

OPERADOR_1 = '10'
SIMBOLO_1 = '+'
OPERADOR_2 = '5'
SIMBOLO_2 = '-'
OPERADOR_3 = '2'
...

Si hiciese un CONCATENATE almacenandolo en una variable:
RESULTADO = '10+5-2...'

Mi pregunta es, ¿se os ocurre alguna forma de realizar esa operación RESULTADO? Tanto los números como los símbolos (+,-,*,/) pueden cambiar y no quiero un código extenso de IF...ENDIF y CASE...ENDCASE

Gracias de antemano.

joau_fedipe
20/06/17, 21:49:37
puedes hacer también así:

COMPUTE resultado = operador_1 + operador_2 - operador_3 .

o así:

COMPUTE resultado = 10 + 5 - 2 .

Saludos.

mialma
22/06/17, 12:41:56
Por hacerlo de forma complicada:


REPORT suma.

DATA:
operador_1(10) VALUE '10',
simbolo_1(10) VALUE '+',
operador_2(10) VALUE '5',
simbolo_2(10) VALUE '-',
operador_3(10) VALUE '2'.

DATA:
t_source_tab TYPE TABLE OF char72,
g_program_name TYPE sy-repid,
g_syntax_message TYPE string,
g_line_no TYPE i
, linea(100), operacion(100),
resultado TYPE i.

CONCATENATE operador_1 simbolo_1
operador_2 simbolo_2
operador_3 INTO operacion SEPARATED BY space.


REFRESH t_source_tab.
APPEND 'REPORT' TO t_source_tab.
APPEND sy-repid TO t_source_tab.
APPEND '.' TO t_source_tab.
APPEND 'FORM MATH CHANGING RESULTADO.' TO t_source_tab.
CONCATENATE 'RESULTADO = ' operacion '.' INTO linea SEPARATED BY space.
APPEND linea TO t_source_tab.
APPEND 'ENDFORM.' TO t_source_tab.



GENERATE SUBROUTINE POOL t_source_tab NAME g_program_name
MESSAGE g_syntax_message LINE g_line_no.
IF sy-subrc <> 0.
MESSAGE g_syntax_message TYPE 'E'.
ENDIF.

START-OF-SELECTION.
PERFORM math IN PROGRAM (g_program_name) CHANGING resultado.
WRITE :/ resultado.