𝐄𝐥 𝐄𝐝𝐢𝐭𝐨𝐫 𝐝𝐞 𝐓𝐒𝐎:𝐄𝐱𝐩𝐫𝐞𝐬𝐢𝐨𝐧 𝐫𝐞𝐠𝐮𝐥𝐚𝐫,𝐞𝐱𝐭𝐫𝐚𝐨𝐫𝐝𝐢𝐧𝐚𝐫𝐢𝐚 𝐚𝐦𝐩𝐥𝐢𝐚𝐜𝐢𝐨𝐧 𝐝𝐞𝐥 𝐅𝐢𝐧𝐝 y 𝐄𝐱𝐜𝐥𝐮𝐝𝐞
En los dos últimos artículos hemos enfocado nuestra atención en nuevos comandos que mejoran la experiencia del uso del Editor de TSO.
En esta edición mostraremos una mejora ya utilizada en algunos de los editores más modernos y es la habilitación del uso de expresiones regulares en los comandos de búsqueda, exclusión y cambio de cadenas de caracteres.
¿Que es una expresión regular o regular expression en su versión inglesa tal como habitualmente se la conoce y menciona?
Es una secuencia de caracteres que especifica un patrón de búsqueda en un texto.
Para mejor comprensión, veamos un ejemplo sencillo que nos acerque al tipo de búsqueda por patrón.
Supongamos que tenemos un dataset de patentes automotrices de un país cualquiera. Supongamos que en ese país las chapas patentes de los vehículos cumplen la regla AA999AA, con A representando un carácter alfabético y 9 un numérico. Esta regla genera un patrón de búsqueda que nos permitirá en una sesión de edición verificar rápidamente si todos los registros del archivo cumplen con esta configuración de caracteres.
Figura 1. Archivo de patentes automotrices. En recuadro amarillos los códigos.
Como saber si esos códigos encolumnados entre las posiciones 65 y 71 poseen las características determinadas por la regla AA999AA ? Utilizando este nuevo feature del editor de TSO con los comandos Find y/o eXclude.
Toda vez que utilicemos una expresión regular en un Find o un eXclude deberemos agregar una R y colocar la expresión entre apostrofes. En este caso el Find deberá escribirse como
F R'[A-Z]{2,}[0-9]{3,}[A-Z]{2,}' all 65 71
el cual debe interpretarse como la búsqueda de todas las ocurrencias ( all ) de cadenas de caracteres entre las columnas 65 y 71 en cuyas sus dos primeras posiciones {2} se encuentren caracteres alfabéticos [A-Z] seguido de tres posiciones {3,} numéricas [0-9] y posean en las dos últimas posiciones {2} caracteres alfabéticos [A-Z].
Figura 2. Find con la expresión regular encuentra 36 ocurrencias
Como se advierte en la Figura.2 Find encuentra todas las ocurrencias, en total 36, ya que el archivo cuenta con 36 registros y la búsqueda se hace exclusivamente entre las columnas 65 y 71.
Hagamos ahora el ejercicio de agregar algunas inconsistencias en los códigos de las patentes automotrices y veamos de qué forma podemos encontrar todas las cadenas de caracteres que no cumplen con el patrón de búsqueda. Para ello, modificamos los códigos de los registros 12, 24 y 36 introduciendo algún carácter numérico donde se esperan caracteres alfabéticos y algún carácter no numérico donde se esperan numéricos.
Figura 3. La búsqueda por expresión regular ahora encuentra sólo 33 ocurrencias
Como encontramos ahora esos 3 registros que incumplen con la regla de configuración de patentes?
Tal cual se ve en Figura 3. la introducción de caracteres inválidos en 3 registros provoca que el Find con la misma expresión regular reduzca las ocurrencias encontradas a 33.
Este resultado ayuda a nuestra búsqueda de códigos de patentes invalidas, pero deberíamos recorrer los 33 registros con F5 y ver cuales son los registros no afectados, lo cual es una tarea por demás ingrata especialmente si nuestro archivo tuviese miles de registros.
¿Como hacemos entonces?
Utilizando el eXclude cuya ejecución excluye todos los registros seleccionados por la expresión regular en una pantalla oculta dejando en la pantalla visible aquellos registros que NO cumplen el patrón de búsqueda.
X R'[A-Z]{2,}[0-9]{3,}[A-Z]{2,}' all 65 71
Figura 4. Exclusión de los registros que cumplen con la expresión regular mostrando los incumplimientos
Ejecutando HIDE X, comando que vimos en el artículo anterior, observamos claramente que los registros 12, 24 y 36 incumplen con la expresión regular usada.
El tercer comando de edición que puede utilizar este feature es el Change.
Como es bien sabido, Change utiliza 2 cadenas de caracteres: la primera para realizar la búsqueda de caracteres y la segunda para reemplazar los caracteres buscados y encontrados.
Recomendado por LinkedIn
Change puede ahora utilizar una expresión regular en la cadena de caracteres de búsqueda.
Siguiendo nuestro ejemplo anterior, abrimos una sesión de edición con el mismo dataset
Figura 5. Sesión de edición del dataset de Patentes
Figura 6. Expansión de la línea de comandos del Editor solicitando un Change con expresión regular
Change busca todas las patentes cuyos dos primeros caracteres sean alfabéticos, contengan un 5 en las siguientes 3 posiciones y finalicen con dos caracteres alfabéticos y todo esto entre las columnas 65 y 71.
La expresión regular que sintetiza esta búsqueda es la siguiente:
R'[A-Z]{2,}(5..|.5.|..5)[A-Z]{2,}' all 65 71
Las cadenas de caracteres que cumplan con esta expresión serán reemplazadas por la palabra PATENTE.
Figura 7. Reemplazos realizados por Change con una expresión regular como argumento de búsqueda
Como se observa en Figura.7, Change efectúa los reemplazos tal cual se deseaba al encontrar múltiples cadenas de caracteres que cumplen con la búsqueda entre las columnas 65 y 71.
El uso de expresiones regulares en la edicion nos da la posibilidad de análisis de datos rápidos a traves de consultas muy complejas en los datasets que habitualmente se realizan con utilitarios submitidos en batch con el consiguiente importante ahorro de tiempo.
En la próxima edición seguiremos indagando más sobre expresiones regulares, sus operadores y símbolos especiales.
Conocías la existencia de las “regular expressions” ?
Cual es tu parecer por su incorporación al Editor de TSO ?
Te invito a compartir este artículo si lo consideras de valor para tu comunidad COBOL o Mainframe.
Agradezco cualquier comentario que desees realizar en LinkedIn.
Hasta la próxima Curiosidad COBOL.
Leonardo Zrycki
IBM Champion 2022 – z System
👨🏫 Capacitación y Training IBM
Encuentra todos los artículos publicados en
y aquí mismo podrás sumarte a los más de 1.090 suscriptores de 𝐂𝐮𝐫𝐢𝐨𝐬𝐢𝐝𝐚𝐝𝐞𝐬 𝐂𝐎𝐁𝐎𝐋
Arquitecto de soluciones en RHT
2 añosGenial. yo estoy usando IDZ y me estoy olvidando de los comandos de TSO. Tengo suerte de que los tengas a mano para cualquier consulta. Muchas gracias Leo