Me encontraba tranquilamente migrando datos de sistemas bastante defasados a una instalación limpia de Odoo cuando advertí varias listas con formatos incompatibles en el sistema. En pocos minutos los había formateado y me encontraba haciendo la exportación masiva correspondiente a la base de datos. Y no, no armé un script (eso hubiese llevado bastante más tiempo), no advertí la solución ya que la tengo interiorizada: el uso de expresión regulares o regex. Me sorprende que a día de hoy mucha gente iniciada en sistemas (y con experiencia incluso) jamás lo utilice y en muchas casos lo desconozca. Así que en esta entrada vengo a explicar un poco su uso, junto con algunos RegEx muy útiles para formatear bases de datos para Odoo.
¿Qué es un RegEx?
En pocas palabras, una Expresión Regular es una simple expresión en formato string (una secuencia de caracteres) que sirven para identificar un patrón de repetición en una cadena de string de longitud indeterminada. Básicamente, si queremos eliminar los espacios de un string podemos simplemente identificarlos con un RegEx y luego reemplazarlos por un string vacío o por un string a elección. Su potencia no termina ahí, pueden usarse para extraer una parte (o todo) del contenido detectado por el patrón para ser utilizado como variable y hacer con dicho contenido lo que queramos (cálculos para cambiar su valor, almacenamiento en un array, etc). Esto hace que sus posibilidades para el uso específico en bases de datos sea elevada. Para colmo casi cualquier lenguaje de programación tiene soporte de RegEx, su sintaxis varía un poco pero es altamente similar, e incluso herramientas (como el VS Code) ya traen una tool específica para ejecutar un RegEx sin pasar por código. En líneas generales, está mucho más a la mano que ejecutar instrucciones de SQL (que también son útiles pero para otra labor).
¿De qué puede servir en Odoo?
Es muy común hoy por hoy que un negocio ya tenga alguna base digital que utiliza a diario y pueda exportarla a un archivo de texto secuencial con patrones (como dbf o csv). Lo que pasa es que, usemos scripts o la herramienta de importación de Odoo, lo más probable es que el formato del contenido no sea compatible con Odoo. Y eso es un problema, lógicamente. Podemos formatear directamente con un script, luego de varias pruebas nos va a quedar. Pero una opción interesante es pre-formatear la data cruda mediante unos RegEx que nos faciliten la tarea de la creación de dicho script (o incluso nos permita utilizar la herramienta de importación masiva de Odoo). Un ejemplo común es un precio donde el separador decimal es una coma (,) cuando debería ser un punto (.). A continuación una lista de expresiones regulares muy útiles para tener a mano al momento de formatear correctamente un archivo de datos. Las mismas fueron probadas con la herramienta de VS Code y deberían funcionar también en Sublime Text:
RegEx: (\d+),(\d+)
Replace: $1.$2
Explicación: Reemplaza la coma en los números por un punto
RegEx: ,(.)$
Explicación: Rescata el último valor de cada línea separada por coma. El punto entre los paréntesis puede reemplazarse por un valor determinado para modificaciones masivas.
RegEx: (\w)
Replace: \L$1
Explicación: Reemplaza las mayúsculas por minúsculas
RegEx: (\b)([a-z])
Replace: $1\u$2
Explicación: Pone letra capital (primera letra de cada palabra en mayúsculas)