¿Qué se os ocurre?

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • vic3
    Member
    • mar
    • 33

    #1

    ¿Qué se os ocurre?

    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.
    Consultor técnico SAP
  • joau_fedipe
    Member
    • oct
    • 79

    #2
    otra forma

    puedes hacer también así:

    COMPUTE resultado = operador_1 + operador_2 - operador_3 .

    o así:

    COMPUTE resultado = 10 + 5 - 2 .

    Saludos.

    Comentario

    • mialma
      Junior Member
      • mar
      • 19

      #3
      Creando un pool de rutinas

      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.

      Comentario

      Trabajando...