¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como limpar quebras de linha em definições de métodos ABAP sem complicações.

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 5 Vistas
0
Cargando...
tl;dr : as expressões regulares são complicadas.
Minha solução parcial: procurar \R e clicar em "localizar próximo" ou "substituir (com espaço)".

Não consigo lembrar exatamente (ajude-me nos comentários!), mas alguém disse algo assim: "Se você tem um problema, use expressões regulares. Então você terá 2 problemas!". E acho que devemos começar os blogs de RegEx com uma citação assim! (Não fiz as regras!) ? )

Então tenho um problema ou vamos chamá-lo de desejo: quero definições de métodos com boa aparência, sem quebras de linha desnecessárias e sem machucar meus dedos ao editar manualmente.

Felizmente, posso esperar que a SAP forneça algo para alcançar isso no futuro, mas eu quero agora.

Já quando eu estava escrevendo minhas perguntas, pensei "bem, expressões regulares devem ser capazes de fazer isso, certo?". Vou te mostrar até onde cheguei, e ficarei feliz se juntos pudermos ir ainda mais longe.

Então, vamos começar com um exemplo de código sujo:
    METHODS check_for_delivery_reference
      RAISING
        zclewm_cx_input_false.
    METHODS check_is_available_stock_cat
      RAISING
        zclewm_cx_input_false.
    METHODS check_todo_final_storage
      RAISING
        zclewm_cx_input_false.
    METHODS check_for_open_wt.

    METHODS do_something_xy
      IMPORTING
        iv_param TYPE abap_bool.

Observe que, desta vez, trata-se apenas das quebras de linha: quero remover algumas delas.

A lógica é: se houver uma quebra de linha que não é precedida por um ".", remova essa quebra de linha.
(nota: "remover" também pode ser escrito como "substituir por nada (ou por espaço)". )

Então, o que precisamos?

\R -> qualquer caractere de nova linha.
[] -> uma lista de caracteres [abc] significa qualquer caractere que seja a, b ou c.
^ -> negação da lista de caracteres [^abc] significa qualquer caractere que não seja nem a, nem b, nem c.

Então, isso é o que estamos procurando:
[^.]\R

Um caractere, que não seja um ".", seguido de uma quebra de linha.

Em teoria, isso deveria funcionar, mas na prática, não funciona realmente, há alguns problemas!
Tentarei ser breve, mencionando apenas 2 deles que entendo:

1. Irá corresponder ao que diz "um caractere não-"." seguido de uma quebra de linha" - e a pesquisa do AdT (ou Notepad++) irá destacá-lo e torná-lo disponível para substituir / substituir tudo.
Mas na realidade, isso não é o que eu quero: eu só quero substituir a quebra de linha, NÃO também o caractere que a precede.
*de isso: 
    METHODS check_for_delivery_reference
      RAISING
*quero isso:
    METHODS check_for_delivery_reference RAISING

*não isso (o último 'e' também foi substituído)
    METHODS check_for_delivery_referenc RAISING

2. Uma quebra de linha também é um caractere não ".", então irá corresponder a uma quebra de linha seguida de outra quebra de linha, não importando se há um . antes ou não.
(3. não tenho certeza: [cr][lf] são apenas um ou dois caracteres de nova linha?)

Então, como frequentemente, não é tão fácil.

O que acabei fazendo, para pelo menos economizar o ciclo [clique do mouse+y+arrastar para destacar, + espaço para excluir]: é isso: apenas procuro a quebra de linha \R e então clico para substituí-la por espaço ou "localizar próximo".

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

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?