Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2012
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #3 [solución]

Control de archivos para la bitácora de cursos

      Implemente el programa bt0pp.exe que sirva para que cada profesor mantenga su bitácora académica, que es un conjunto de archivos en que registra todos los materiales de su curso. Debido a lo heterogéneo los materiales, es necesario adoptar una nomenclatura para cada uno de los archivos que contiene.

2012.1.02-prof.pedro..picapiedra.curriculum.htm
2012.1.02-prof.pedro..picapiedra.horario.pdf
2012.1.02-prof.pedro..picapiedra.horario.xls
2012.1.ci1101.g04.pedro..picapiedra.01-descripcion.htm
2012.1.ci1101.g04.pedro..picapiedra.02-descripcion.doc
2012.1.ci1101.g04.pedro..picapiedra.02-descripcion.jpg
2012.1.ci1101.g04.pedro..picapiedra.20-asistencia.xls
2012.1.ci1101.g04.pedro..picapiedra.31-notas.xls
2012.1.ci1101.g04.pedro..picapiedra.32-evaluacion.txt
2012.1.ci1101.g04.pedro..picapiedra.examen-1.1-enunciado.htm
2012.1.ci1101.g04.pedro..picapiedra.examen-1.6-mejor.pdf
2012.1.ci1101.g04.pedro..picapiedra.examen-1.8-peor.txt
2012.1.ci1101.g04.pedro..picapiedra.examen-2.1-enunciado.htm
2012.1.ci1101.g04.pedro..picapiedra.examen-2.6-mejor.pdf
2012.1.ci1101.g04.pedro..picapiedra.examen-2.8-peor.txt
2012.1.ci1101.g04.pedro..picapiedra.examen-3.3-enunciado.htm
2012.1.ci1101.g04.pedro..picapiedra.examen-3.6-mejor.pdf
2012.1.ci1101.g04.pedro..picapiedra.examen-3.8-peor.txt
2012.1.ci1101.g04.pedro..picapiedra.tarea-01.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-02.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-03.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-04.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-05.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-06.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-07.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-08.htm

En este ejemplo están los nombres de los archivos del profesor “Pedro Picapiedra”, queien imparte el grupo 4 del curso ci1101. Al principio aparecen varios archivos que no tienen grupo, en los que se almacena información del profesor que no depende de los cursos que imparte, y luego están todos los archivos para cada uno de los grupos que imparte este profesor. El punto '.' sirve de separador entre las partes del nombre.

Al usar el guión '-' en lugar del punto '.' se logra que varios archivos relacionados queden en la misma carpeta, como ocurre con los tres archivos "descripcion.htm", "descripcion.doc" y "descripcion.jpg", cuyos nombres están precedidos por los numerales "01" "02" "02" que sirven para que aparezcan ordenados al sacar un lista alfabético de los archivos contenidos en la carpeta.

El programa bt0pp.exe es muy útil porque sirve para determinar si están todos los archivos que forman la bitácora académica. Este programa no modifica los archivos, pues su única función es revisar los nombres de archivo para determinar si hay alguno que falta. Por ejemplo, si se menciona para un curso el grupo 4, verifica que estén los datos para los 2 grupos anteriores: si alguno falta, bt0pp.exe produce un mensaje que dice: "2012.1.ci1101.g11.* ==> Falta grupo 1,3". Un a vez detectado un faltante, quien se encargue de juntar todos los archivos de la bitácora académica puede tratar de conseguir los archivos faltantes (pidiéndoselos al profesor que debió entregarlos).

La ejecución de bt0pp.exe produce 2 archivos de texto: bt0pp_error.txt y bt0pp_rename.bat. En el primero están los errores detectados por el programa, y el segundo es un archivo de lotes que sirve para cambiarle el nombre a aquellos archivos de la bitácora cuyo nombre es levemente incorrecto. Por ejemplo, si se ha definido que la sigla del curso debe tener 4 dígitos pero hay un nombre de archivos que usa solo 3, en el archivo de comandos producido por bt0pp.exe estará incluido un comando "rename" para solventar esta deficiencia. Sin embargo, la mera ejecución de bt0pp.exe no es suficiente para corregir el nombre y siempre es necesario ejecutar bt0pp_rename.bat para lograrlo (cada comando "rename" debe aparecer, completo, en un solo renglón, pero aquí se muestra partido para apreciar bien su efecto):

renane
   "2012.1.ci10.g04.pedro..picapiedra.01-descripcion.htm"
   "2012.1.ci0010.g04.pedro..picapiedra.01-descripcion.htm"

rename
   "2012.1.ci1101.g4.pedro..picapiedra.examen-1.6-mejor.pdf"
   "2012.1.ci1101.g04.pedro..picapiedra.examen-1.6-mejor.pdf"

El programa bt0pp.exe usa un archivo de configuración que contiene 4 secciones que sirven para describir el formato de la bitácora: ciclo, extensión, profesor y grupo. En el aparte de ciclo está definido el ciclo lectivo al que pertenece la bitácora, que generalmente consta de una pareja de números que definen el año y el número de ciclo: 2012.1 para el primer ciclo del año 2012. Opcionalmente, el programa también permite incluir un nombre de sede: sj.2012.1. En la sección de extensión se mencionan cuáles son las extensiones de los archivos de bitácora, como por ejemplo { docx pdf jpg ... }. Estas extensiones determina el programa que se requiere para abrir el archivo. En la sección del profesor están los datos de cada docente, los que son independiente de qué cursos imparte y, por eso, no requieren de la sigla del curso impartido. Cuando un renglón en el archivo de configuración contiene ';' el programa ignora todo el resto del renglón, pues esa es la marca que sirve para comenzar un comentario.

; bt0pp.cfg
; =========
; CICLO
sede =  ; no hay sede: esto funciona: sede = sj
ciclo = 9999 9  ; 2012.1 ; ciclo  = ?? 9999 9 ; sj.2012.1
; EXTENSION
ext = txt pdf doc docx odt htm html url xls ods jpg png gif ppt odp
; PROFESOR
prof = curri|vitae horario
; GRUPO
grupo = ??9999 g99   ; ci0101.g04
gruno = carta|descr firma asistencia nota|notas evaluacion|eval
; VARIOS por grupo
grmult = tarea-99|tpg-99
grmult = examen-9 (enunciado mejor peor)

En la sección en que se definen los archivos para cada grupo se usan valores separados por espacios, por barritas '|' o por paréntesis '(' ')'. Entre puntos dobles también se pueden poner signos de pregunta '?' o el dígito '9' para mostrar que en el nombre del archivo debe aparecer un valor numérico o alfabético. En el archivo bt0pp.cfg que se muestra arriba la llave "grupo" tiene asociados los valores "??9999" y "g99", que indican que la sigla de cada grupo debe tener 1 o 2 letras y desde 1 hasta 4 dígitos numéricos, mientras que el número grupo debe contener la letra 'g' y uno o dos dígitos. Esto quiere decir que "ci1101.g1" y "a32.g0" son 2 nombres adecuados para la sigla del grupo. Sin embargo, "ci01101" o "zzz" no son nombres válidos, pues al primero le sobra el quinto dígito y al segundo le falta su parte numérica; además, ninguno tiene la parte obligatoria con el número de grupo. En el nombre de los archivos de bitácora no es conveniente usar espacios en blanco y, por eso, cuando aparece una espacio en blanco el programa bt0pp.exe lo interpreta como si fuera un punto '.' por lo que, en este ejemplo, todos los archivos tienen como prefijo "2012.1.".

La llave "gruno" sirve para definir cuáles archivos deben aparecer solo una vez por grupo. En este ejemplo, para cada grupo en la bitácora deben aparecer 5 archivos cuyos nombres contengan las palabras mencionadas en la parte derecha de la llave "gruno". La barrita '|' se usa para permitir una de varias alternativas, como ocurre con carta|descr en donde si aparece un archivo con la palabra "carta" ya no hace falta que aparezca otro con la palabra descr". La barrita contrasta con los paréntesis, que se usan solo con la llave "gsec" y sirven para exigir que varios valores aparezcan muchas veces, como ocurre con los exámenes en este ejemplo.

La llave "grmult" sirve para definir archivos que deben aparecer varias veces, como ocurre con los exámenes, en lo que puede haber 1, 2 o 3 exámenes parciales y un examen final. Como para cada examen es necesario dejar en la bitácora copia del enunciado, del mejor y del peor examen, entre paréntesis aparecen esas 3 palabras.

La forma de abrir la pantalla negra es pulsar [Inicio]→[Accesorios]→[Símbolo del sistema] y luego ahí ejecutar el programa bt0pp.exe en la pantalla de comandos, de forma similar a la siguiente.

X:\DIR\SubDir> cd /d F:\Bitacora\2012\1

F:\Bitacora\2012\1> cd picapiedra

F:\Bitacora\2012\1\picapiedra> bt0pp
bt0pp: Lectura de configuracion bt0pp.cfg
     - NO existe archivo de configuracion bt0pp.cfg
bt0pp: Fin de ejecucion

F:\Bitacora\2012\1\picapiedra> copy ..\bt0pp.cfg .

F:\Bitacora\2012\1\picapiedra> bt0pp sj.2012.1.ci0202.g04.pedro..picapiedra
bt0pp: Lectura de configuracion bt0pp.cfg
     - sj.2012.1.ci0202.g04.pedro..picapiedra <==> Prefijo
     - CON sede = "sj"
     - Generando bt0pp_error.txt
     - Generando bt0pp_rename.bat
bt0pp: Fin de ejecucion

F:\Bitacora\2012\1\picapiedra> cd ..\..\..
F:\Bitacora>

Ocurre con frecuencia que los profesores, al entregar su bitácora electrónica, no respeten la nomenclatura para darle nombre a cada archivo. Más bien, lo usual es que entreguen una carpeta comprimida tipo “.ZIP” con sus datos personales y otras tantas para cada uno de los cursos que imparten. En esta situación se hace necesario cambiarle el nombre a cada uno de los archivos, lo que requiere de mucho tiempo si se hace manualmente. Por eso, como parámetro opcional, bt0pp.exe puede recibir una hilera que muestra cuál es el prefijo común a todos los nombres de archivo de una carpeta. Por ejemplo, la hilera "sj.2012.1.ci0202.g04" hace el archivo de ajustes de nombre que bt0pp_rename.bat agregue ese prefijo al nombre de cada archivos en aquellas ocasiones que haga falta, y también que ajuste a la cantidad de dígitos que tiene la sigla y el grupo, de manera que produciría algo similar a los siguiente:

renane
   "2012.1.ci10.g04.pedro..picapiedra.01-descripcion.htm"
   "sj.2012.1.ci0010.g04.pedro..picapiedra.01-descripcion.htm"
rename
   "2012.1.ci1101.g4.pedro..picapiedra.examen-1.6-mejor.pdf"
   "sj.2012.1.ci1101.g04.pedro..picapiedra.examen-1.6-mejor.pdf"
rename
    "curriculum.xls"
    sj.2012.1.ci0202.g04.pedro..picapiedra.curriculum.xls"
rename
    "descripcion.odt"
    sj.2012.1.ci0202.g04.pedro..picapiedra.descripcion.odt"
rename
    "horario.odt"
    sj.2012.1.ci0202.g04.pedro..picapiedra.horario.odt"
rename
    "notas.odt"
    sj.2012.1.ci0202.g04.pedro..picapiedra.notas.odt"

Aunque el trabajo que realiza el programa bt0pp.exe solo sirve para detectar omisiones y errores en los archivos de bitácora, la estructura del archivo de configuración bt0pp.cfg es suficientemente simple como para que cualquier personal la comprenda rápidamente, pero es suficientemente expresiva para almacenar una bitácora de una escuela bastante grande. La cantidad de archivos por ciclo es de unos cuantos miles, aunque escuelas muy grandes podrán llegar a tener más de 10,000 archivos por ciclo, los que requieren una cantidad equivalente de megabytes para ser almacenados. Esto quiere decir que es posible almacenar la bitácora académica para un ciclo lectivo en una llave maya de 8 gigabytes, por lo mantener los datos de los últimos 5 años tomará alrededor de 100 gigas, que es un tamaño muy modesto pues un disco de 1 terabyte cuesta US $100 o menos: eso es poco dinero, en relación al volumen de datos. Sin embargo, puede resultar adecuado separar los datos de ciclos diferentes en carpetas diferentes, para no tener que manejar una carpeta con cientos de miles de archivos.


Consulta:
Profe: ¿cual es la diferencia entre estas dos llaves?
  1. grSEC → NO existe
  2. grUNO → Carta al estudiante, hoja de notas, etc.
  3. grMULT → Varias tareas, varios exámenes
Respuesta:
:: grUNO ::

2012.1.ci1101.g04.pedro..picapiedra.01-descripcion.htm
2012.1.ci1101.g04.pedro..picapiedra.02-descripcion.doc
2012.1.ci1101.g04.pedro..picapiedra.02-descripcion.jpg
2012.1.ci1101.g04.pedro..picapiedra.20-asistencia.xls
2012.1.ci1101.g04.pedro..picapiedra.31-notas.xls
2012.1.ci1101.g04.pedro..picapiedra.32-evaluacion.txt

:: grMULT ::

2012.1.ci1101.g04.pedro..picapiedra.examen-1.3-enunciado.htm
2012.1.ci1101.g04.pedro..picapiedra.examen-1.6-mejor.pdf
2012.1.ci1101.g04.pedro..picapiedra.examen-1.8-peor.txt
2012.1.ci1101.g04.pedro..picapiedra.examen-2.3-enunciado.htm
2012.1.ci1101.g04.pedro..picapiedra.examen-2.6-mejor.pdf
2012.1.ci1101.g04.pedro..picapiedra.examen-2.8-peor.txt

2012.1.ci1101.g04.pedro..picapiedra.tarea-01.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-02.htm
2012.1.ci1101.g04.pedro..picapiedra.tarea-03.htm

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 7 días
Entregue su documentación en la primera fecha, y luego entregue el programa completo en la segunda fecha.
Segunda etapa: 3 días
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2012
Derechos de autor reservados © 2012
[home] <> [/\]