Como ya nos avanzó nuestro jefe, se ha cerrado un contrato de servicio para una gran empresa con más de 200 trabajadores y varios departamentos.
Esto puede dificultar la tarea de insertar tantos usuarios, aun cuando podamos copiar y pegar la lista de usuarios del documento PDF que nos proporciona nuestro jefe.
Por este motivo, le hemos pedido a nuestro jefe que nos envíe la informacion de empleados y departamentos en un formato editable de fácil acceso. Nos lo enviará en el formato que el tiene, una hoja de cálculo LibreOffice en formato ods.
Aquí tienes el fichero que te ha enviado tu jefe sobre la nueva campaña: Fichero de datos
Primer objetivo: agilizar la obtención de información
Tenemos que agilizar el acceso a esta información de manera que podamos obtener toda la información de este fichero en nuestro script.
Segundo objetivo: almacenar información
Tiene pinta que la actividad empresarial de la organización está creciendo, por un lado es algo bueno, pero por otro lado esto supone trabajo más complicado para el administrador, que eres tu.
Vamos a almacenar información sobre las cuentas de usuarios que creamos para cada campaña a través de nuestros scripts. Esta información nos tiene que servir para poder consultar más adelante la siguiente información:
- A qué campaña pertenece un usuario concreto
- Cuál es el nombre completo de una cuenta de usuario
- En qué empresa está trabajando un usuario concreto
- A qué empresa pertenece una campaña concreta
- Cuál es la fecha de finalización de contratación de cada campaña
- ….
Si se te ocurre más información importante, puedes incluirla. No es necesario utilizar un único fichero de log. Deberás pensar un poco en dónde y cómo organizas esta información.
Solución propuesta
Buscando un poco por Internet nos encontramos con que podemos lanzar libreoffice con la opción –convert-to para convertir entre distintos formatos soportados por libreoffice.
Sin embargo, al convertir directamente con la opción –convert-to nos encontramos con que el CSV resultante no utiliza codificación UTF-8 con lo que los acentos salen un poco raros.
Vamos a probar.
Seguimos buscando por Internet, pero esta vez vamos a realizar una búsqueda en la que indiquemos que queremos obtener formato UTF-8 en el resultado de la transformación. Con esta búsqueda encontramos un enlace interesante con una solución al problema y otro enlace, dentro de éste, dónde nos dan información más detallada del uso de esta opción de conversión dentro del sitio de libreoffice.
He creado un pequeño script para agilizar la conversión:
Vamos a probar a ejecutar solo la línea 19 pero con los datos de nuestro fichero para comprobar que funciona.
Con el comando libreoffice funciona igual
Ya tenemos una forma de convertir un fichero ODS en un CSV que podemos leer. Como contra, el separador ahora es una coma, pero eso no es un problema para nosotros.
El único problema, con respecto al scritpt que ya hemos creado es que ahora el separador de campos es una coma y no un tabulador, aunque esto no es un gran problema para nosotros. Tan solo tendríamos que cambiar el delimitador de los campos en los comandos cut por una coma o cambiar la coma por un tabulador en el fichero.
Los números que aparecen al final del comando, detrás de las comillas dónde indicamos el formato, se utilizan de filtro para la salida del fichero CSV. Según la página de CSV Filter parameters el primer número es el código ASCII del separador de campos, el segundo el delimitador de cadenas de texto y el tercero es la codificación utilizada.
Actualizando el script
Vamos a añadir esto a nuestro script.
Ojo! En este fichero los separadores son una coma. Tenemos que o bien cambiar el fichero o bien cambiar el delimitador.
Vamos a hacer más flexible nuestro script, utilizando como delimitador una variable en la que asignaremos el delimitador.
Ahora vamos a buscar todos los comandos cut y vamos a añadir el delimitador de la siguiente forma: -d «$delim»
Vamos cambiando según los resultados de la búsqueda
Otro
Otra ocurrencia
Otra ocurrencia
Para probarlo, vamos a crear una nueva campaña de infopacense, con los usuarios que nos han pasado en el csv pero esta vez con otra fecha de inicio
Sin queremos probar sin que se creen los 40 o 50 usuarios del csv, tan solo tenemos que modificar el bucle de la función de gestiona usuarios
Cuidado! Hemos cometido un pequeño error: Hay que cambiar todos los comandos cut en los que utilicemos un delimitador (aunque sea el tabulador por defecto) para acceder a un campo, hay un par de comandos cuts que usamos para obtener el primer caracter y por tanto no utilizan delimitador.
Vamos a añadir los datos de la campaña desde fichero
El fichero contiene
Al final, después de corregir un par de cosillas el fichero nos queda así
Dejar una respuesta