¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como ler um número de 4 dígitos em uma string usando REGEX - Exemplo com código ABAP

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

Meu requisito é extrair um número de 4 dígitos da seguinte cadeia usando REGEX e consigo extrair 1925, mas também obtenho 2017 e 0001, e quero evitar 0001 porque a cadeia total não tem 4 dígitos.

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

Código a seguir para sua referência

           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...

Olá Rossi

Obrigado pela ajuda, isso funciona para mim.

Novamente, meu erro, na verdade não quero codificar o valor 4, isso virá de alguma tabela. O seguinte código funciona para mim sem codificação.

        
            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...

Não fiz isso?

Pode procurar por um não dígito ou letra latina seguido de quatro dígitos seguidos de um não dígito ou letra latina, talvez?

Com REGEX POSIX, uma solução é:

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, não fique bravo... 😊

O que estou tentando buscar é um número de 4 dígitos e 1925 e 2017 estão bons porque 2017 é seguido por um PONTO. Mas 0001 é seguido pela letra T, o que quero evitar. Então me diga se há alguma viabilidade no código para fazer isso.

Em segundo lugar, se pudermos evitar tanto 2017 quanto 0001, também está tudo bem para mim.

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

Por que você diz que não deve obter 0001, corresponde à regra que você definiu, ou seja, 4 dígitos!

Por que você diz " mas também estou recebendo 2017" como se não quisesse 2017?

Por que não qualquer sequência de 4 dígitos em "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?