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

Tarea #3 [solución]

btp2a: [BiTácora Plano ==> Arbol]

2010-1/              ==> I-Sem-2010
  ci1201/            ==> este curso
    g04/             ==> este grupo
      oscar..arias/  ==> encabezado del email ECCI
        10..carta/   ==> carta al estudiante
        20..tpg/     ==> tareas programadas
          01/        ==> primera tarea
          02/        ==> siguiente tarea programada
        30..ex1/     ==> primer examen
        30..ex2/     ==> segundo examen
        30..ex3/     ==> examen final
        40..qz/      ==> quices de este semestre
        50..doc/     ==> etc ~ etc
Figura 1

      Los profesores de la ECCI rutinariamente compilan varios documentos sobre el curso en una bitácora. Con el fin de mantener esta bitácora en un formato electrónico, se usa un estándar para nombrar cada uno de los documentos de la bitácora. Estos nombres corresponden a una estructura jerárquica de carpetas o subdirectorios, como se muestra en la Figura 1.

      Si la Figura 1 es la estructura de subdirectorios para la bitácora, se puede almancenar todos los archivos de la bitácora en una sola carpeta incluyendo en el nombre de cada archivo el prefijo que muestra adónde estaría ese archivo almacenado en la jerarquía de directorio. Por ejemplo, los siguientes archivos calzan en la estructura jerárquica de la Figura 1:

2010.1.ci1201.g04.oscar..arias.10..carta.pdf
2010.1.ci1201.g04.oscar..arias.11..cartafirma.doc
2010.1.ci1201.g04.oscar..arias.11..cartafirma.png
2010.1.ci1201.g04.oscar..arias.12..lista.xls
2010.1.ci1201.g04.oscar..arias.13..temario.doc
2010.1.ci1201.g04.oscar..arias.14..asist.01.png

2010.1.ci1201.g04.oscar..arias.20..tpg.01.califica.pdf
2010.1.ci1201.g04.oscar..arias.20..tpg.01.enunciado.pdf
2010.1.ci1201.g04.oscar..arias.20..tpg.02.califica.pdf
2010.1.ci1201.g04.oscar..arias.20..tpg.02.enunciado.pdf
2010.1.ci1201.g04.oscar..arias.20..tpg.03.califica.pdf
2010.1.ci1201.g04.oscar..arias.20..tpg.03.enunciado.pdf

2010.1.ci1201.g04.oscar..arias.30..ex1.enunciado.pdf
2010.1.ci1201.g04.oscar..arias.30..ex1.medio.pdf
2010.1.ci1201.g04.oscar..arias.30..ex1.mejor.pdf
2010.1.ci1201.g04.oscar..arias.30..ex1.peor.pdf
2010.1.ci1201.g04.oscar..arias.30..ex2.enunciado.pdf
2010.1.ci1201.g04.oscar..arias.30..ex2.medio.pdf
2010.1.ci1201.g04.oscar..arias.30..ex2.mejor.pdf
2010.1.ci1201.g04.oscar..arias.30..ex2.peor.pdf

2010.1.ci1201.g04.oscar..arias.40..qz.01..enunciado.pdf
2010.1.ci1201.g04.oscar..arias.40..qz.02..enunciado.pdf
2010.1.ci1201.g04.oscar..arias.40..qz.03..enunciado.pdf
2010.1.ci1201.g04.oscar..arias.40..qz.04..enunciado.pdf
2010.1.ci1201.g04.oscar..arias.40..qz.05..enunciado.pdf

2010.1.ci1201.g04.oscar..arias.50.doc.asistentes.pdf
2010.1.ci1201.g04.oscar..arias.50.doc.bibliografia.pdf
2010.1.ci1201.g04.oscar..arias.50.doc.compilador.pdf
Figura 2

      Por brevedad, en la Figura 2 solo se muestran los archivos de un grupo (el "g04"). El nombre del profesor se obtiene a partir de su dirección de correo electrónico ECCI, duplicando el punto ('.') separador: oscar..arias <==> oscar.arias@ecci.ucr.ac.cr

      Usted implementará su programa "btp2a.exe" que leerá los nombres de los archivos del directorio actual. Luego, "btp2a.exe" debe usar esos nombres para generar un archivo de texto llamado "btp2a_exe.bat" que contiene comandos. Al ser ejecutado, "btp2a_exe.bat" transformará los archivos actuales en una estructura de subdirectorios en los que quedará almacenados cada uno de los archivos, pero reduciendo el nombre de cada archivos eliminándole el prefijo que contiene la información sobre la estructura jerárquica usada para organizar la bitácora. Por ejemplo, suponga que en el directorio actual se ejecuta el programa "btp2a.exe" y además ahí también están los archivos llamados:
   2010.1.ci1201.g04.oscar..arias.20..tpg.01.califica.pdf
   2010.1.ci1201.g04.oscar..arias.20..tpg.01.enunciado.pdf
Al ejecutar "btp2a.exe" el resultado será el programa de comandos "btp2a_exe.bat" que incluirá, además de otras sentencias, las siguientes:

:: btp2a_exe.bat [BiTacora Plano ==> Arbol] Produce el árbol correspondiente a los archivos actuales
@echo off
:: ...
mkdir "2010"
mkdir "2010\1"
mkdir "2010\1\ci1201"
mkdir "2010\1\ci1201\g04"
mkdir "2010\1\ci1201\g04\oscar..arias"
mkdir "2010\1\ci1201\g04\oscar..arias\20"
mkdir "2010\1\ci1201\g04\oscar..arias\20..tpg"
mkdir "2010\1\ci1201\g04\oscar..arias\20..tpg\01"

move  "2010.1.ci1201.g04.oscar..arias.20..tpg.01.califica.pdf"  "2010\1\ci1201\g04\oscar..arias\20..tpg\01\califica.pdf"
move  "2010.1.ci1201.g04.oscar..arias.20..tpg.01.enunciado.pdf" "2010\1\ci1201\g04\oscar..arias\20..tpg\01\enunciado.pdf"

:: ...
goto _out
:_out
:: btp2a_exe.bat ==> Fin de archivo
Figura 3

      En resumen, el archivo de comandos "btp2a_exe.bat" primero crea los subdirectorios y luego traslada cada archivo a su carpeta destino:

      Para implementar su programa "btp2a.exe" usted necesita grabar en una lista "<std::list>" todos los nombres de los archivos. Luego debe ordenarla para evitar crear la misma carpeta muchas veces y por último debe generar el comando "move" para cada uno de los archivos de la lista.

      Utilice su clase "readDir" para obtener los nombres de los archivos que usará para generar el archivo de comandos "btp2a_exe.bat". Muchos archivos no son archivos de bitácora, pues no comienzan con un año o no siguen el patrón de nombres definido arriba, que siempre incluye: año, semestre, curso, grupo y profesor. Su programa debe ignorar los archivos que no forman parte de una bitácora.

Consulta:
Profe: ¿ cómo genero un archivo .bat desde C++? Me parece que en la tarea el .bat invoca un .exe, ¿cierto? ¿Cómo lo hago?
Respuesta:
cout << ":: btp2a_exe.bat [BiTacora Plano ==> Arbol] ";
cout << " Produce el árbol correspondiente a los archivos actuales" << endl;
cout << "@echo off" << endl;
cout << ":: ..." << endl;
cout << "mkdir \"2010\"" << endl;
etc... etc...

X:\DIR\SubDir> :: Genera btp2a_exe.bat
X:\DIR\SubDir>    btp2a.exe >btp2a_exe.bat
X:\DIR\SubDir> :: Traslada cada archivo a su carpeta
X:\DIR\SubDir>    btp2a_exe.bat

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

[mailto:] Entrega de Tareas

Tiempo de entrega: 7 días
Modalidad: En parejas

Soluciones

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