Práctico

  1. Crear en un repositorio CVS el proyecto data2html e ingresar en el mismo un script de shell denominado de la misma forma: data2html que comience de la siguiente forma:

    #!/bin/bash

    # $Id: trabajo.lyx,v 1.5 2014/09/04 17:41:57 hcurti Exp $

    # Breve párrafo explicando lo que hace este script

  2. A continuación escribir el código del script que debe construir un archivo html a partir de un archivo delimitado. El script debe aceptar dos sinopsis:

    data2html

    data2html archivo...

    En el primer caso se leerá el texto desde entrada estándar y se emitirá el código html por salida estándar. En el segundo caso se irán abriendo y procesando los archivos pasados como argumento, generando un archivo html para cada uno.

    Para generar el nombre del archivo de salida se utilizará el siguiente criterio: Si el nombre del archivo de entrada termina en `.txt', se reemplazará `.txt' por `.html'; en cualquier otro caso se agregará directamente la extensión `.html'. Ej: para mitabla.txt se debe generar mitabla.html; para otratabla se debe generar otratabla.html; para otracosa.dat se debe generar otracosa.dat.html. Los archivos de salida en todos los casos deben guardarse en el directorio desde donde se ejecutó el script.

    El archivo de entrada debe contener datos tabulares delimitados, utilizando el siguiente formato:

    nombre de la tabla

    titulo1:titulo2:...:tituloN

    dato1.1:dato1.2:...:dato1.N

    .

    .

    .

    datoM.1:datoM.2:...:datoM.N

    El archivo de salida debe ser una tabla html válida, y el nombre de la tabla debe ser usado como título. Por ejemplo, para un archivo de entrada que contiene:

    Listado de alumnos

    Apellido:Nombre:Dni

    Perez:Jose:283949320

    Fernandez:Martín:30123456

    Gonzalez:Juan:23434403

    se debe generar:

    <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN

      http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd>

    <html>

     <head>

      <title>Listado de alumnos</title>

     </head>

     <body>

      <h1>Listado de alumnos</h1>

      <center><table border=1>

       <tr><th>Apellido</th><th>Nombre</th><th>Dni</th></tr>

       <tr><td>Perez</td><td>Jose</td><td>283949320</td></tr>

       <tr><td>Fernandez</td><td>Martín</td><td>30123456</td></tr>

       <tr><td>Gonzalez</td><td>Juan</td><td>23434403</td></tr>

      </table></center>

     </body>

    </html>

    No hace falta que el código html esté indentado, ni que siga ese orden de interlineado en particular. Sí es importante que estén todos los elementos mostrados. Para el procesamiento del nombre del archivo de salida se recomienda el uso de las sustituciones de parámetro, explicadas en la página de manual de BASH, en la sección `Expansión'.

  3. Hacer un commit de este script a CVS y marcarlo (con cvs tag) como v_1_0.
  4. Extender el script data2html para que acepte las siguientes opciones:

    -c | -css plantilla
    Agregar una línea de plantilla css en el encabezado utilizando la plantilla indicada. El parámetro plantilla es obligatorio.
    -d | -delimiter delim
    Utilizar delim en vez de dos puntos como delimitador de columna en el archivo de entrada. El parámetro delim es obligatorio, y debe ser un carácter. Si se recibiera más de un carácter, se debe utilizar el primero solamente.
    -e | -embedded
    Emitir solamente la tabla html (desde <table> hasta </table>), omitiendo el resto del código html, de manera tal que el archivo de salida pueda ser insertado en otro documento html.
    -t | -title titulo
    Utilizar titulo como título html en vez del título que figura en el archivo. El parámetro titulo es obligatorio.
    -H | -noh1
    No imprimir el título con <h1> al principio de la tabla.
    -h | -help
    No procesar archivos, en su lugar mostrar por salida de error las sinopsis aceptadas y una pequeña descripción de lo que hace cada opción (similar a la que se muestra aquí).
    -u | -usage
    No procesar archivos, en su lugar mostrar por salida de error las sinopsis aceptadas.

    Para procesar las opciones se recomienda utilizar el comando getopt. (Hay documentación y ejemplos en man getopt; en Debian los ejemplos se guardan en /usr/share/doc/util-linux/examples)

    Para la opción -c (o -css), por ejemplo si se recibiera -c plantilla.css, se deberían agregar las siguientes líneas después de <head> y antes de <title>:

    <META http-equiv=Content-Style-Type content=text/css>

    <LINK href=plantilla.css type=text/css rel=stylesheet>

    No es necesario que el script verifique la existencia del archivo plantilla.css.

  5. Escribir un Makefile que permita instalar y desinstalar este script en algún directorio del sistema (ej: /usr/local/bin); y que mediante el objetivo clean elimine cualquier archivo de respaldo generado por los editores de texto.
  6. Hacer un commit del script y del Makefile a CVS y marcarlo (con cvs tag) como v_2_0.