¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Cómo leer un número de 4 dígitos en una cadena utilizando REGEX - Ejemplo con código ABAP

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 14 Vistas
0
Cargando...

Mi requisito es leer un número de 4 dígitos en la siguiente cadena utilizando REGEX y puedo leer 1925 pero también obtengo 2017 y 0001 y quiero evitar 0001 porque la cadena total no tiene 4 dígitos.

Cadena: /DEV/NAN DE RANCE SA 1925 DU 15.11.2017 TR0478989117T0001 INBOUND MONEY TRANSFER

Código a continuación para tu referencia

           DO ls_len TIMES.
              CLEAR:ls_num.
              ls_off = sy-index - 1.
              ls_num = gs_data-payadd_info.
              REPLACE REGEX '^(\d+).*$' IN SECTION OFFSET ls_off OF ls_num WITH '$1'.
              IF sy-subrc = 0.
                REPLACE REGEX '^.*[^\d](\d*)$' IN ls_num WITH '$1'.
                lv_length = strlen( ls_num ).
                IF lv_length = '4'.
                  FIND FIRST OCCURRENCE OF ls_num IN gs_data-payadd_info RESULTS ls_end_pos.
                  lv_length = ls_end_pos-offset - lv_start_pos.
                  EXIT.
                ENDIF.
              ENDIF.
            ENDDO.
Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Hola Rossi

Gracias por la ayuda, esto funciona para mí.

De nuevo, mi error, en realidad no quiero codificar el valor 4, esto vendrá de alguna tabla. El siguiente código funciona para mí sin codificación.

        
            Data: lv_leng type string.
            lv_leng = ls_zfi-start_length.
            CONCATENATE '[^\d\w](\d{' lv_leng '})[^\d\w]' into DATA(lv_regx).
            FIND REGEX lv_regx IN gs_data-payadd_info SUBMATCHES DATA(lv_val).
            
        
    
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

No lo hice 😉

¿Puedes buscar no un dígito o letra latina seguido de cuatro dígitos seguido de no un dígito o letra latina tal vez?

Con REGEX POSIX, una solución es:

FIND REGEX '[^\d\w](\d{4})[^\d\w]' IN gs_data-payadd_info SUBMATCHES DATA(four_digits).
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Ok Rossi Don't get angry... 😊

what I am trying to fetch is 4 Digit number and 1925 and 2017 is fine because 2017 is followed by a DOT. but 0001 is followed by letter T which I want to avoid. So now tell me if there is any feasibility in code to do that.

Second if we can avoid both 2017 and 0001 is also fine with me.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿Por qué dices que no debes obtener 0001, corresponde a la regla que definiste, es decir, 4 dígitos!

¿Por qué dices " pero también estoy obteniendo 2017" como si no quisieras 2017?

¿Por qué no cualquier secuencia de 4 dígitos en "0478989117"?

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?