/* */

24 de agosto de 2007

Discos

.
Trabajo Práctico

Objetivo
Desarrollar un conjunto de programas (utilitarios) que permitan administrar los discos almacenados en formato digital (por ejemplo mp3).

Descripción
Suponemos que tenemos gran cantidad de CDs/DVDs conteniendo discos en formato digital. Puede haber discos en formato mp3, ogg, flac, ape, wav, wma, o cualquier otro formato nuevo.

La información contenida en estos CDs/DVDs está ordenada en carpetas. Una carpeta por cada artista y (dentro de esta) una carpeta por cada disco del artista contenido en este CD/DVD. A su vez, dentro de cada disco puede haber archivos (por ejemplo mp3) o más subcarpetas (por ejemplo tapas dentro de las cuales puede haber archivos).

Un ejemplo corto de esto puede ser el siguiente:



Vemos que en la unidad de CD F:\ hay tres carpetas: Charly Garcia, Fito Paez y Spinetta. Cada una de estas carpetas tiene subcarpetas que representan discos del artista. Por ejemplo: vemos que en este CD o DVD tenemos tres discos de Charly Garcia: "Demasiado Ego", "La Hija de la Lágrima" y "Parte de la Religión". Dentro de cada una de estas carpetas debe haber archivos (por ejemplo) mp3.

También podemos ver que el disco "Ey" de Fito Paez tiene otra subcarpeta llamada tapitas. Es decir: dentro de Ey probablemente tengamos archivos mp3 y dentro de tapitas tendremos archivos jpg.

Es decir: lo único seguro es que en el nivel inicial hay una carpeta por cada artista y que en el segundo nivel hay una carpeta por cada disco del artista.

Ahora bien, podemos abrir una consola de DOS y tirar el siguiente comando (suponiendo que la unidad de CD/DVD sea F:):

dir F: /s /b > contenido.txt

Este comando lista recursivamente los contenidos del directorio F: (mostrando además todos sus subdirectorios y archivos) y redirecciona la salida al archivo contenido.txt que quedará de la siguiente manera:

contenido.txt
   1:F:\Charly Garcia
2:F:\Fito Paez
3:F:\Spinetta
4:F:\Charly Garcia\Demasiado Ego
5:F:\Charly Garcia\La Hija de la Lagrima
6:F:\Charly Garcia\Parte de la Religion
7:F:\Charly Garcia\Demasiado Ego\t1.mp3
8:F:\Charly Garcia\Demasiado Ego\t2.mp3
9:F:\Charly Garcia\La Hija de la Lagrima\t1.mp3
10:F:\Charly Garcia\La Hija de la Lagrima\t2.mp3
11:F:\Charly Garcia\La Hija de la Lagrima\t3.mp3
12:F:\Charly Garcia\Parte de la Religion\t1.ogg
13:F:\Charly Garcia\Parte de la Religion\t2.ogg
14:F:\Fito Paez\Del 63
15:F:\Fito Paez\Ey
16:F:\Fito Paez\Del 63\t1.ogg
17:F:\Fito Paez\Del 63\t2.ogg
18:F:\Fito Paez\Ey\t1.flac
19:F:\Fito Paez\Ey\t2.flac
20:F:\Fito Paez\Ey\t3.flac
21:F:\Fito Paez\Ey\tapitas
22:F:\Fito Paez\Ey\tapitas\atras.jpg
23:F:\Fito Paez\Ey\tapitas\frente.jpg
24:F:\Spinetta\Los Socios del Desierto
25:F:\Spinetta\Los Socios del Desierto\cd1
26:F:\Spinetta\Los Socios del Desierto\cd2
27:F:\Spinetta\Los Socios del Desierto\cd1\t1.mp3
28:F:\Spinetta\Los Socios del Desierto\cd1\t2.mp3
29:F:\Spinetta\Los Socios del Desierto\cd1\t3.mp3
30:F:\Spinetta\Los Socios del Desierto\cd2\t1.mp3
31:F:\Spinetta\Los Socios del Desierto\cd2\t2.mp3
32:F:\Spinetta\Los Socios del Desierto\cd2\t3.mp3
33:

Los comandos que vamos a desarrollar deben procesar la información contenida en este archivo (habrá uno de estos por cada CD o DVD) y luego mostrarla de diferentes formas.


Comandos

bkpadd lbl < contenido.txt

Este comando recibe por stdin cada una de las líneas del archivo (en este caso) contenido.txt y debe registrar la información en los archivos .dat que detallaremos luego.

bkpart [masc]

Este comando muestra una lista ordenada alfabeticamente de todos los artistas de los cuales tenemos discos almacenados. Opcionalmente puede recibir una máscara con comodines "*". En cado de recibirla la lista deberá mostrar solo aquellos artistas que apliquen para la máscara dada.

Por ejemplo:

bkpart Cha*

Mostraría "Charly Garcia", "Charly Parquer" y todos los artistas cuyo nombre comienze con "Cha".

bkpdisc idArtista

Este comando recibe como parámetro el idArtista y muestra ordenados alfabeticamente todos los discos de este artista almacenados en todos los CDs/DVDs.

No hay comentarios: