Extraer numeros de cadena alfanumerica

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Alfredosite
    Senior Member
    • jul
    • 135

    #1

    Extraer numeros de cadena alfanumerica

    hola compañeros quisiera saber si existe alguna función que me obtenga los numeros de una cadena alfanumérica. por ejemplo.

    Tengo
    511 (1) 3211133
    533 (2) 4566564-3
    ....
    ..
    .

    Quisiera obtener
    51113211133
    533245665643
    ....
    ..
    .

    Haber si alguien se anima por alguna idea

    Muchas gracias.
    Saludos Cordiales,
    Alfredo Pastor Avendaño
    SAP - Consultant HCM
  • cmacvicar
    Member
    • may
    • 43

    #2
    *No Conozco Ninguna Función Pero Esto hace lo que quieres.

    * Cambia los '(' por ' '.
    TRANSLATE "Variable" using '( '.

    * Cambia los ')' por ' '.
    TRANSLATE "Variable" using ') '.

    * Cambia los '-' por ' '.
    TRANSLATE "Variable" using '-'.

    * Condensa y elimina los espacios en Blanco
    CONDENSE "Variable" NO-GAPS.

    *Para que esto no se vea feo en el Código Encapsulado en una Rutina


    Que Estes Bien Chauuu
    Que estes, bien.


    Suerte chau

    Comentario

    • Alfredosite
      Senior Member
      • jul
      • 135

      #3
      Originalmente publicado por cmacvicar
      *No Conozco Ninguna Función Pero Esto hace lo que quieres.

      * Cambia los '(' por ' '.
      TRANSLATE "Variable" using '( '.

      * Cambia los ')' por ' '.
      TRANSLATE "Variable" using ') '.

      * Cambia los '-' por ' '.
      TRANSLATE "Variable" using '-'.

      * Condensa y elimina los espacios en Blanco
      CONDENSE "Variable" NO-GAPS.

      *Para que esto no se vea feo en el Código Encapsulado en una Rutina


      Que Estes Bien Chauuu
      Bueno lo que yo hize fue esto:
      Si fuese entrada: +57 (1) 4253008

      DO.
      REPLACE '.' INTO p0105-usrid WITH ''.
      REPLACE '+' INTO p0105-usrid WITH ''.
      REPLACE '-' INTO p0105-usrid WITH ''.
      REPLACE '(' INTO p0105-usrid WITH ''.
      REPLACE ')' INTO p0105-usrid WITH ''.
      IF sy-subrc NE 0.
      EXIT.
      ENDIF.
      ENDDO.
      condense p0105-usrid no-gaps.

      Salida Saldria : 5714253008
      ^
      Pero esta lógica no funcionaria en caso en ese campo tenga.

      por ejemplo: 511 - 12A (1F) -14

      Si fuese asi con caracteres no solo ( ),-,(,.,+) entonces seria poco mas de lineas por cada no caracter no numerico....tal haya alguna función por ahi??

      Igual se agradece el aporte
      Saludos Cordiales,
      Alfredo Pastor Avendaño
      SAP - Consultant HCM

      Comentario

      • DavidXD_XD
        Moderator
        • ago
        • 1255

        #4
        Hola, nunca he visto una funcion q haga eso, pero aqui va un pequeño algoritmo q puede servir

        Código:
        PARAMETERS: p_cadena TYPE string.
        
        DATA: g_out  TYPE string,
              g_int  TYPE i,
              g_cont TYPE i,
              g_char TYPE c.
        
        RANGES: gr_num FOR g_char.
        
        START-OF-SELECTION.
        
        gr_num-sign = 'I'.
        gr_num-option = 'BT'.
        gr_num-low = '0'.
        gr_num-high = '9'.
        APPEND gr_num.
        
        g_cont = STRLEN( p_cadena ).
        
        DO g_cont TIMES.
          IF p_cadena+g_int(1) IN gr_num.
            CONCATENATE g_out p_cadena+g_int(1) INTO g_out.
          ENDIF.
          ADD 1 TO g_int.
        ENDDO.
        
        WRITE: g_out.
        Ahi esta el parametro de entrada y salida, espero te pueda ayudar
        David Carballido Córdova

        Comentario

        Trabajando...