Tarea 2 de Almacenamiento y Recuperación de la
Información
Trimestre 2009 Invierno
Entrega: 18 de febrero de
2009 antes de las 22:00
El propósito de esta tarea es el de practicar la lectura de
archivos con registros de longitud fija y la escritura de archivos con
registros de longitud variable.
El archivo de entrada fija.txt
contendrá una serie de
registros de longitud fija. Cada
registro constará de tres campos de longitud fija. El primer
campo ocupará cuatro posiciones y será un número
de uno a cuatro dígitos escrito en decimal en el rango de 1 a
9999 (el campo de año de una fecha). El segundo campo
ocupará dos posiciones y será un número de uno o
dos dígitos escrito en decimal en el rango 1 a 12 (el campo de
mes en una fecha). El tercer campo ocupará dos posiciones y
será un número de uno o dos dígitos escrito en
decimal en el rango 1 a 31 (el campo de día en una fecha). Las
posiciones no ocupadas por dígitos estarán ocupadas por
puntos y todos los dígitos de cada campo serán
consecutivos, pero no necesariamente están alineados a la
derecha o a la izquierda. Aunque cada campo tiene un rango bien
definido es posible que
aparezcan registros con contenidos inválidos (por ejemplo,
caracteres que no son puntos o dígitos o números
decimales que no correspondan a años, meses o días
válidos).
El archivo de salida variable.txt
deberá contener una serie de
registros de longitud variable separados por avances de línea.
Cada registro deberá constar de tres campos de longitud variable
separados por un guión. El primer campo deberá ser un
número
de uno a cuatro dígitos escrito en decimal en el rango de 0 a
9999. El segundo campo deberá ser un número
de uno a dos dígitos escrito en decimal en el rango de 0 a 12.
El tercer campo deberá ser un número
de uno a dos dígitos escrito en decimal en el rango de 0 a 31.
Excepto por el valor 0 ningún campo de la salida podrá
comenzar con el valor 0.
La idea general es transformar cada uno de los registros del archivo de
entrada en un registro del archivo de salida. Así, por ejemplo,
si el registro de la entrada es 2009.216
entonces el registro de salida debe ser 2009|2|16 o si el registro de
la entrada es .15.021.
entonces el registro de salida debe ser 15|2|1. Por otro lado, si el
registro de la entrada es ilegal (ya sea porque no cumple con el
formato descrito arriba o porque la fecha no tiene sentido) entonces el
registro de salida deberá ser 0|0|0. Ejemplos de registros de
entrada ilegales son 1.1.1..1,
HOLA0215, 20091502 y 2009.230. Para facilitar las cosas, enero
siempre tendrá 31 días, febrero siempre tendrá 28
días, etc.
Escribe un programa llamado fechasNN
que lleve a cabo la transformación descrita arriba, donde NN es la clave de dos dígitos
asignada por el profesor (si sólo recibiste un dígito X tu clave es 0X). Sólo deberás enviar el
código fuente de tu programa (en C, C++, Java, Pascal, Fortran,
etc. siempre y cuando compilen con gcc, g++, javac, fpc, f77, etc. tal
cual esté instalado en el servidor).
Ejemplo
de entrada (observa que nada separa un registro del siguiente)
1.1.1..12009.2162009.23020091502.15.021.HOLA0215
Ejemplo
de salida (observa que los registros terminan con avance de
línea)
0|0|0 2009|2|16 0|0|0 0|0|0 15|2|1 0|0|0
Ya están listas sus cuentas, pero en gabrijela.azc.uam.mx.
Espero que a lo largo del trimestre nos mudemos a un mejor servidor.