• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
FORMACIÓN SAP

Mejorar Regex Toy – Parte 4

By s4pcademy 


Este es el cuarto de una serie de seis blogs que describen cómo mejorar el probador de expresiones regulares conocido como Regex Toy, y cada blog describe una sola mejora de sus capacidades.

Antes de aplicar el cuarto parche

El blog anterior en esta serie describió cómo parchear una copia de Regex Toy para permitirle identificar coincidencias incluso cuando el texto coincidente se extiende a ambos lados de los saltos de línea implícitos, pero terminó con una descripción de un problema por el cual Regex Toy formatea el texto en el bloque de coincidencias de modo que se ejecuta más allá el área visible de la ventana y está acompañado por una barra de desplazamiento horizontal. Para ilustrar este problema nuevamente, ejecute Regex Toy mejorado y siga estos pasos:

  • Pegue el siguiente trabalenguas en el bloque de texto:

Una mofeta se sentó en un tocón. El zorrillo thunk el muñón apestaba y el zorrillo thunk el zorrillo apestaba.

  • Coloque una marca de verificación en la casilla de verificación EN LA TABLA.
  • Seleccione el botón Todas las ocurrencias.
  • Especifique en la ranura Regex del bloque de entrada la siguiente cadena

la mofeta

Como se muestra en la captura de pantalla anterior, el texto se desplaza hacia la derecha del área visible de la ventana de coincidencias, lo que requiere el uso de la barra de desplazamiento horizontal para verlo.

Ahora haga lo mismo con Regex Storm, seleccionando la casilla de verificación Ignorar caso:

Como se muestra en la captura de pantalla anterior, con Regex Storm el texto no se desplaza hacia la derecha del área visible del bloque de entrada.

El motivo del cuarto parche.

  • A diferencia de Regex Storm, Regex Toy no facilita que el texto que se muestra en el bloque de coincidencias se ejecute más allá de las restricciones del área visible de la ventana de coincidencias.

Aplicación del cuarto parche

Usando su editor ABAP favorito, edite la copia del objeto de repositorio ABAP DEMO_REGEX_TOY que contiene los parches anteriores y aplique el siguiente cambio de 2 pasos en la visualización del método:

1. Antes de la instrucción CONCATENATE LINES OF, inserte el siguiente conjunto de líneas (la primera y la última línea, que se muestran antes y después de una línea de comentario de todos los guiones, ya existen en el código como líneas 216 y 217, respectivamente):

216   APPEND '<html><body><font face="Arial monospaced for ...
      " -----------------------------------
      " DEMO_REGEX_TOY enhancement #4
      " Format result text using approximate window width
      " specified by line_len:
      constants     : html_space     type string value '&nbsp;'
                    , html_special_character_start
                                     type string value '&'
                    , html_special_character_end
                                     type string value ';'
                    , html_format_start
                                     type string value '<'
                    , html_format_end
                                     type string value '>'
                    .
      data          : visible_text_length
                                     type int4
                    , html_last_space_length
                                     type int4
                    , cause_line_break
                                     type flag
                    , html_string    type string
                    , html_excess    type string
                    , html_stack     type standard table
                                       of string
                    .
      loop at result_it
         into result_wa.
        clear: html_string, visible_text_length.
        while strlen( result_wa ) gt 00.
          case result_wa+00(01).
            when html_format_start.
              while result_wa+00(01) ne html_format_end.
                concatenate html_string
                            result_wa+00(01)
                       into html_string.
                shift result_wa left by 01 places.
              endwhile.
            when html_special_character_start.
              if strlen( result_wa ) ge 06.
                if result_wa+00(06) eq html_space.
                  if visible_text_length gt line_len.
                    cause_line_break = abap_true.
                  endif.
                endif.
              endif.
              while result_wa+00(01) ne
                    html_special_character_end.
                concatenate html_string
                            result_wa+00(01)
                       into html_string.
                shift result_wa left by 01 places.
              endwhile.
              add 01 to visible_text_length.
              if cause_line_break eq abap_false.
                html_last_space_length
                                     = strlen( html_string ) + 01.
              endif.
            when others.
              add 01 to visible_text_length.
          endcase.
          concatenate html_string
                      result_wa+00(01)
                 into html_string.
          shift result_wa left by 01 places.
          if cause_line_break eq abap_true.
            clear html_excess.
            if html_last_space_length gt 00.
              html_excess =
                     substring( val = html_string
                                off = html_last_space_length ).
              html_string =
                     substring( val = html_string
                                len = html_last_space_length ).
            endif.
            append html_string
                to html_stack.
            clear: html_string, html_last_space_length.
            visible_text_length      = strlen( html_string ).
            cause_line_break         = abap_false.
            if strlen( html_excess ) gt 00.
              concatenate html_excess
                          result_wa
                     into result_wa.
            endif.
          endif.
        endwhile.
        append html_string
            to html_stack.
      endloop.
      " -----------------------------------
217   CONCATENATE LINES OF result_it INTO result_wa ...

2. Luego cambie la instrucción CONCATENATE LINES OF de

CONCATENATE LINES OF result_it INTO result_wa …

a

CONCATENATE LINES OF html_stack INTO result_wa …

Este es el mismo cuarto parche sin cambios desde el E-bite.

Después de aplicar el cuarto parche

Ahora activa el programa y ejecútalo usando el mismo proceso descrito anteriormente:

  • Pegue el siguiente trabalenguas en el bloque de texto:

Una mofeta se sentó en un tocón. El zorrillo thunk el muñón apestaba y el zorrillo thunk el zorrillo apestaba.

  • Coloque una marca de verificación en la casilla de verificación EN LA TABLA.
  • Seleccione el botón Todas las ocurrencias.
  • Especifique en la ranura Regex del bloque de entrada la siguiente cadena

la mofeta

Como se muestra en la captura de pantalla anterior, debería encontrar que ahora se encuentran las mismas dos coincidencias, pero el texto en el bloque Coincidencias ya no se desplaza hacia la derecha de su área visible.

¿Que sigue?

Ahora intente la siguiente prueba de expresión regular:

  • Pegue la siguiente primera oración del trabalenguas en el bloque de texto:

A
zorrillo
se sentó
en
a
tocón.

de modo que cada palabra vaya seguida de un salto de línea explícito que la coloque en su propia línea, como se muestra arriba.

  • Coloque una marca de verificación en la casilla de verificación EN LA TABLA.
  • Seleccione el botón Todas las ocurrencias.
  • Especifique un carácter de un solo punto en la ranura Regex
  • Presiona enter.

Como se muestra en la captura de pantalla anterior, debería encontrar que ahora cada carácter del Texto coincide con el patrón de expresión regular, como debería ser.

Nota: El carácter de punto es el carácter comodín aplicable a los patrones de expresiones regulares, lo que indica que se debe hacer coincidir cualquier carácter en esa posición en el texto, proporcionando la misma funcionalidad a las expresiones regulares que el carácter comodín ‘+’ proporciona con patrones especificados para rangos y declaraciones de opciones de selección. en SAP.

Sin embargo, observe que el texto ya no está formateado en la ventana Coincidencias con los saltos de línea explícitos proporcionados con el contenido de la ventana Texto.

A continuación, intente lo mismo con Regex Storm:

Como se muestra en la captura de pantalla anterior, Regex Storm observa y retiene saltos de línea explícitos.

Mientras que el cuarto parche proporciona una mejora a Regex Toy al permitirle mantener el texto de las coincidencias dentro de los límites de su ventana, ya no observa saltos de línea explícitos. Este problema se aborda en el próximo blog de esta serie, Mejora de Regex Toy – Parte 5.




Primera mesa redonda de clientes y socios para el entorno SAP BTP ABAP
Previo
SAP Datasphere y asociaciones – Collibra
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.