alguien sabria hacer este programa?¿?¿

Eilb
29 de Marzo del 2006
Problema a resolver
Se desea realizar un programa que lea un fichero de texto y a continuaci´on realice sobre su contenido una serie
de operaciones de edici´on, como las que se har´ıan en un editor de textos interactivo. Cuando se hayan realizado
todas las operaciones, el programa debe terminar guardando los cambios en el mismo fichero o en otro fichero, o bien
descartando los cambios.
Posiciones del cursor
En todo momento el programa almacenar´a la posici´on del cursor, como se har´ıa en un editor interactivo; inicialmente,
la posici´on del cursor es la (1, 1), que corresponde a la primera l´ınea, primera columna. El cursor puede estar
en una de las l´ıneas del texto, y adem´as en una l´ınea virtual situada al final del texto, que no contiene nada (y por
tanto no se debe guardar en el fichero), pero en la que se puede posicionar el cursor para insertar caracteres. Por
tanto, si el fichero de entrada contiene n l´ıneas, el rango de posiciones v´alidas (antes de hacer ninguna operaci´on de
edici´on) para la primera coordenada del cursor es desde 1 hasta n + 1.
Las posiciones v´alidas en una l´ınea van desde la posici´on 1 hasta la que contenga el ´ultimo car´acter de la l´ınea,
y adem´as existe una posici´on virtual que denominaremos posici´on final, que se corresponde con la posici´on siguiente
a la del ´ultimo car´acter de la l´ınea. Por ejemplo, si una l´ınea tiene lo siguiente:
hola, mundo.
las posiciones v´alidas en esa l´ınea van desde la 1, que corresponde a la “h”, hasta la 13, que ser´ıa la posici´on final,
ya que en la posici´on 12 estar´ıa el “.”. En ning´un caso se debe dejar el cursor en una posici´on no v´alida (p.ej. en
la columna 15), siempre se debe ajustar para que la posici´on sea v´alida. Si una l´ınea est´a en blanco (no contiene
caracteres), la ´unica posici´on v´alida es la posici´on final. En la l´ınea virtual situada al final del texto, la ´unica posici´on
v´alida es la 1, que corresponde a la posici´on final.
Puede haber espacios en blanco tanto al final como al principio de la l´ınea, y no deben tratarse de forma especial,
son caracteres como los dem´as. Por simplificar, el car´acter tabulador no aparecer´a en el fichero de entrada (no es
necesario comprobarlo), ni se podr´a insertar en el editor.
Especificaci´on de la pr´actica
La pr´actica tendr´a un argumento que se le pasar´a en la l´ınea de comandos, que ser´a el nombre del fichero de
entrada (el nombre puede tener como m´aximo 200 caracteres). Si el programa tiene m´as o menos argumentos, se
debe emitir el siguiente mensaje de error (exactamente como aparece) y terminar el programa:

E1: NUMERO DE ARGUMENTOS INCORRECTO. USO: p1 fichero
Si el programa no puede abrir el fichero de entrada, debe emitir el siguiente mensaje de error:
E2: ERROR DE APERTURA DEL FICHERO.
Lo primero que debe hacer el programa es leer el fichero de entrada y almacenarlo en un vector de cadenas de
caracteres (cada l´ınea del fichero en un vector de caracteres), que tendr´a como m´aximo 1000 l´ıneas. Si el fichero tiene
m´as de 1000 l´ıneas, el programa debe emitir el siguiente mensaje de error y terminar:
E3: FICHERO DEMASIADO GRANDE, MAXIMO 1000 LINEAS.
Comandos de edici´on
Una vez le´ıdo el fichero de texto y almacenado en el vector de cadenas de caracteres, el programa debe ir leyendo
del teclado (la entrada est´andar) uno o m´as comandos de edici´on, que debe ir ejecutando uno a uno, seg´un los va
leyendo. Si lo que se lee de la entrada no es un comando v´alido (porque no es un nombre v´alido de comando o porque
le faltan argumentos), el mensaje de error que se debe mostrar es el siguiente:
E4: ERROR, COMANDO INCORRECTO.
Los comandos son los siguientes:
Comandos de movimiento del cursor
En algunos de estos comandos puede suceder que al cambiar la posici´on del cursor a otra l´ınea, la columna actual
sea una posici´on no v´alida en la nueva l´ınea, porque la nueva l´ınea tiene menos caracteres que el valor de la columna
actual. En esos casos se debe cambiar la columna actual a la posici´on final de la nueva l´ınea.
Comando Nombre Descripci´on
ARR Arriba Mover el cursor a la l´ınea anterior, si la l´ınea actual no es la 1.
ABJ Abajo Mover el cursor a la l´ınea siguiente, si la l´ınea actual no es la l´ınea virtual.
IZQ Izquierda Mover el cursor a la columna anterior; si la columna actual es la 1, entonces
el cursor se debe mover a la posici´on final de la l´ınea anterior, excepto cuando
el cursor est´a en la posici´on (1, 1), que no existe l´ınea anterior.
DER Derecha Mover el cursor a la columna siguiente; si la columna actual es la posici´on
final de la l´ınea actual, entonces el cursor se debe mover a la columna 1 de
la l´ınea siguiente, excepto cuando la l´ınea actual es la l´ınea virtual.
PGA P´agina arriba Mover el cursor 24 l´ıneas hacia arriba, o a la l´ınea 1 si la l´ınea actual es
menor o igual que 24. Este comando no es equivalente a ejecutar 24 veces el
comando Arriba, puesto que en cada ejecuci´on de dicho comando es posible
que se altere la posici´on de la columna (para que se ajuste a una posici´on
v´alida); en ese sentido se podr´ıan realizar (en el peor caso) 24 ajustes de la
columna, mientras que en este comando s´olo habr´ıa que realizar un ajuste.
PGB P´agina abajo Mover el cursor 24 l´ıneas hacia abajo, o a la l´ınea virtual si no existen
tantas l´ıneas. Como en el comando anterior, hay que ajustar la posici´on de
la columna adecuadamente, y solamente una vez.
POS l Posici´on Mover el cursor a la l´ınea l, si es una l´ınea v´alida; se puede suponer que l
ser´a un n´umero entero, y el rango de l´ıneas v´alidas incluye a la l´ınea virtual.
La columna no cambia, excepto si hay que ajustarla a un valor v´alido, como
en los dem´as comandos.

Fundamentos de Programaci´on II, 2005–2006 4
Comandos generales
Comando Nombre Descripci´on
MOS Mostrar Imprimir por pantalla el contenido del vector de cadenas,
con una l´ınea que indica el principio y otra que indica el
final (ver ejemplos).
SAL Salir Salir del programa (sin guardar los cambios, ni preguntar).
Antes de salir el programa debe emitir el siguiente mensaje:
M1: ADIOS.
SGU Salir guardando Guardar el vector de l´ıneas en el fichero de entrada (borrando
el contenido que tuviera), y salir del programa (emitiendo
antes el mensaje “M1”).
SGC "nombre" Salir guardando como Guardar el vector de l´ıneas en el fichero “nombre”, y salir
del programa (emitiendo el “M1”).
GUA Guardar Guardar el vector de l´ıneas en el fichero de entrada (borrando
el contenido que tuviera).
GCO "nombre" Guardar como Guardar el vector de l´ıneas en el fichero “nombre”.
Al abrir el fichero para escribir el vector de l´ıneas es posible que se produzca un error, y en ese caso se debe
emitir el mensaje de error “E2”. Por otro lado, tanto al leer el fichero de entrada como al escribir el fichero de salida
puede producirse un error de entrada/salida. En ese caso, el programa debe emitir el siguiente mensaje de error, y
terminar:
E5: ERROR DE LECTURA/ESCRITURA.
En la pr´actica, es un error que es dif´ıcil que aparezca (al menos en un disco duro), por lo que en la correcci´on no
se probar´a este caso, aunque puede ser que en alguna revisi´on de la pr´actica se tenga en cuenta.