[C con Clase] Número de palabras en una fila de texto

Salvador Pozo salvapozo en gmail.com
Mar Abr 7 11:03:00 CEST 2009


El día 7 de abril de 2009 8:45, Abel <aydabella en yahoo.com.ar> escribió:
> Por ejemplo tengo un texto de 10.000 filas, quiero cambiar el contenido de la fila 926 (por ejemplo), cómo le digo a mi programa que cambie el contenido de esa fila, sin que tenga que recorrer mi texto desde la fila 0, hasta la fila 926. Me parece que esto tengo que solucionarlo con un puntero, pero la idea no está muy clara.

El problema con los ficheros de texto es que no se puede hacer un
acceso aleatorio por el número de línea, ya que cada una tiene, en
general, una longitud diferente. Esto obliga, al menos en el primer
momento, a recorrer el fichero secuencialmente.

Para agilizar la edición de ficheros de texto existen algunas
técnicas, aunque no son sencillas de implementar.

Con editores se suele usar una técnica de doble buffer. En el segundo
buffer se lee parte del fichero, y a medida que avanzamos en el texto
se transfieren caracteres al otro buffer, de modo que el punto de
inserción (el cursor) está siempre al final del primer buffer. Si se
introducen más caracteres se añaden al primer buffer. De este modo se
puede modificar el texto sin leer y sobrescribir el fichero
continuamente.

Cuando uno de los buffers se llena o se vacía hay que hacer algunas
operaciones adicionales, algunas de las cuales pueden requerir cierto
tiempo. Pero en general, dejar el fichero en su estado final se deja
para cuando el usuario indica que quiere guardar los cambios, y el
resto se hace mediante ficheros temporales.

Otra solución, que probablemente te sirva mejor, es crear una
estructura dinámica de líneas, para la que cada nodo se refiere a una,
y en la que guardaremos la información necesaria para movernos por el
fichero.

Esta información puede ser, la posición de fichero donde empieza la
línea y la longitud de esa línea. Además podemos tener un puntero a un
buffer para almacenar aquellas líneas que han sido modificadas, de
modo que al final podamos reconstruir un fichero completo.

De todos modos, hay que ser creativo. A mi particularmente, me gusta
crear soluciones nuevas para cada problema. :-)

Hasta pronto.
-- 
Salvador Pozo Coronado
http://www.conclase.net
mailto:salvapozo en gmail.com




Más información sobre la lista de distribución Cconclase