Sumar cadenas de caracteres?

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Astaroth_SA
    Member
    • jul
    • 58

    #1

    Sumar cadenas de caracteres?

    Buenas. Acabo de empezar en esto y tengo una duda:

    Además de otros campos, para lo ke me interesa, tengo un campo distribuidor (char4) y consumo (char16) en una trabla:
    Código:
    ----ditribuidor-----  consumo   ----
             001                100       
             001                 50       
             002                110       
             003                200
    Y necesito que en otra me guarde las líneas que coincidan distribuidor con el campo consumo sumado:
    Código:
    ----ditribuidor-----  consumo   ----
             001                150       <===== 100 + 50
             002                110     
             003                200
    ¿Se pueden sumar las cadenas? He investigado algo del COLLECT pero no sé si el campo a sumar tiene que ser numérico o valen caracteres. Muchas gracias.
  • dantepx
    Junior Member
    • oct
    • 2

    #2
    Sumar cadenas de caracteres?

    Hola Astaroth_SA,

    Viendo tu duda se me ha ocurrido una solución relativamente simple. En primer lugar te tendrías que crear una tabla de soporte para el distribuidor.

    La idea es hacer dos LOOP's anidados. En la tabla de soporte haces un loop por distribuidor, y con este valor hacer otro LOOP a la tabla en la que tienes toda la información. Sumas el valor de los consumos y lo guardas en la tabla del sumatorio. A continuación te pongo como quedaría el código más o menos.

    * Tabla que guarda la información. No se cual es su estructura
    * pero al menos tiene los campos distribuidor y consumo

    DATA: lt_normal TYPE TABLE OF " El que posea

    * Tabla con la misma estructura que lt_normal en la que vamos
    * a guardar los sumatorios por distribuidor

    data: lt_sumada TYPE TABLE OF " El que posea

    * Estructuras de carga

    DATA: ls_normal TYPE TABLE OF " El que posea
    ls_sumada TYPE TABLE OF " El que posea

    * Tipo para la tabla de apollo de los distribuidores

    TYPES: BEGIN OF ts_distribuidor,
    distribuidor TYPE char4,
    END OF ts_distribuidor.

    DATA: lt_distribuidor TYPE TABLE OF ts_distribuidor.
    DATA: ls_distribuidor TYPE ts_distribuidor.

    CLEAR: ls_distribuidor,
    ls_normal.

    * Se carga la tabla de apollo con los distribuidores

    LOOP AT lt_normal INTO ls_normal.

    ls_distribuidor-distribuidor = ls_normal-distribuidor.

    APPEND ls_distribuidor TO lt_distribuidor.

    ENDLOOP.

    * Se ordena

    SORT lt_distribuidor.

    * Se eliminan los duplicados

    DELETE ADJACENT DUPLICATES FROM lt_distribuidor.

    * Importante la limpieza de variables

    CLEAR: ls_distribuidor,
    ls_normal,
    ls_sumada.

    * LOOP por distribuidor

    LOOP AT lt_distribuidor TO ls_distribuidor.

    CLEAR: ls_normal,
    ls_sumada.

    LOOP AT lt_normal INTO ls_normal WHERE distribuidor = ls_distribuidor-distribuidor.

    * Sumatorio del valor del consumo

    ls_sumada-consumo = ls_normal-consumo + ls_sumada-consumo.

    ENDLOOP.

    ls_sumada-distribuidor = ls_distribuidor-distribuidor.

    * Con el sumatorio del consumo y el distribuidor cargamos la tabla
    * lt_sumada que es la contiene los valores sumados

    APPEND ls_sumada TO lt_sumada.

    ENDLOOP.

    Espero que te sirva de ayuda,

    Un cordial saludo.

    Comentario

    • Astaroth_SA
      Member
      • jul
      • 58

      #3
      Voy a intentarlo así. Mi duda principal era esa que si creando una variable tipo char16 para el total podía hacer eso:

      total (char16) = total (char16) + consumo (char16) y me diera el resultado numérico de la suma al ser cadenas de caracteres. Muchas gracias.

      Comentario

      • IPASCA02
        Junior Member
        • jul
        • 9

        #4
        ¿ Se pueden sumar campos que sean definidos como tipo char? ¿Si son campos númericos que se van a sumar, no deberían ser de tipo númerico?

        Un saludo

        Comentario

        • Astaroth_SA
          Member
          • jul
          • 58

          #5
          Sí. Lo he probado con este programilla.

          Código:
          *&---------------------------------------------------------------------*
          *& Report  Z_SUMAR_CHAR
          *&
          *&---------------------------------------------------------------------*
          *&
          *&
          *&---------------------------------------------------------------------*
          
          REPORT  Z_SUMAR_CHAR.
          
          DATA: total TYPE char16,
                num1 TYPE char16 VALUE '0000000000015000',
                num2 TYPE char16 VALUE '315'.
          
          total = num1 + num2.
          
          WRITE:/'TOTAL: ' , total.
          Captura.PNG

          Comentario

          Trabajando...