[ Foro de Pascal ]

Ficheros de texto

04-Jan-2013 13:31
Antonio Rodrigues
5 Respuestas

Lo que pasa es lo siguiente. Es la primera ves que trabajo con ficheros de texto y como son diferentes de los ficheros de tipo tengo algunos problemas.

Este es el enunciado de mi ejercicio:

"Realizar un programa que abra un fichero de texto para lectura, y lo vaya leyendo línea a línea. Deberá presentar como resultado final el nombre del fichero, el número de líneas y el número de caracteres."

assign(fichero, Nfichero);
    reset(fichero);

    while not eof(fichero) do
          readln(fichero, linea);

    close(fichero);

Este es el fichero que he hecho para abrir y leer el texto. El problema es que para poder abrir y leer el texto, antes tengo que tener un texto para poder abrirlo y leerlo. Solo que no se si ese texto tengo que hacerlo en el propio programa o lo hago a parte y lo abro con el programa ???



04-Jan-2013 20:14
Luis Torres (+18)

Puedes tanto crear un archivo de texto con un programa, como leerlo con un programa. Pero como estás comenzando la mejor opción sería que lo crearas tú mismo.
Crear un archivo de texto es muy sencillo: abres el block de notas que tienes en windows, escribe lo que quieras en él y lo guardas preferiblemente con la extensión .txt. No es necesario guardarlo con esa extensión, pero es muy útil, porque al ver un conjunto de archivos la extensión te dice qué tipo de archivo es.
¿Dónde guardar los archivos?: lo puedes guardar en el mismo directorio en el que se encuentre el programa que lo usará, tal como se hizo con los archivos binarios que creaste en el programa de las Cestas; o lo puedes guardar en el directorio raíz C:\. Si lo guardas en un lugar distinto del directorio donde está el programa que usará el archivo, debes especificar la ruta del mismo en el código del programa, porque de lo contrario habría un error al no encontrarlo. Por ejemplo, si lo guardas en C:\antonio, para abrirlo desde el código del programa deberías hacerlo así:
Nfichero:='C:\antonio';
assign(fichero,Nfichero);
reset(fichero);

Eso es todo.
Saludos.


04-Jan-2013 20:34
Antonio Rodrigues

Si lo entiendo.

Bueno, ahora tengo otra pregunta. Como dice el enunciado, despues de abrir y leer el archivo, tengo que contar cuantos caracteres hay y cuantas lineas tiene.

assign(fichero, 'C:\Hola.txt');
    reset(fichero);

    while not eof(fichero) do
          begin
               readln(fichero, linea);
               writeln(linea);

               if length(linea) > 0 then
                  for i:=1 to length(linea)-1 do
                      caracteres:=caracteres+1;
          end;

    close(fichero);

Esta es la forma en que he hecho el fichero. Como puedes ver, para contar cuantos caracteres hay utilizo esto:

               if length(linea) > 0 then
                  for i:=1 to length(linea)-1 do
                      caracteres:=caracteres+1;

Solo que de esta forma, tambien cuento los puntos y los espacios. Pero yo solo quiero contar las letras, los espacios y los puntos no. Me puedes decir una forma para contar solo las letras y no los puntos ni los espacios ??

Por cierto, para contar las lineas se hace de la misma forma ??


06-Jan-2013 11:14
Nacho Cabanes (+84)

Ya lo tienes casi listo. Apenas un par de detalles:

- Si quieres contar todos los caracteres, te sirve con lo que tienes:

if length(linea) > 0 then
 for i:=1 to length(linea)-1 do
     caracteres:=caracteres+1;

o bien puedes abreviarlo a

caracteres := caracteres + length(linea);


- Si quieres excluir algunos caracteres, como los espacios o los puntos, puedes aprovechar la estructura que tienes, añadiendo un "if" que mire si son caracteres válidos:

if length(linea) > 0 then
 for i:=1 to length(linea)-1 do
     if (linea[1] <> " ") and (linea[1] <> ".") then
       caracteres:=caracteres+1;


- Para contar líneas te basta con usar otro contador, que aumentes en cada pasada del "while":

while not eof(fichero) do
begin
   lineas := lineas + 1;
   readln(fichero, linea);
   ....


06-Jan-2013 23:10
Antonio Rodrigues

Gracias por la ayuda Nacho. Resulta que me he puesto investigando y he descubierto como contar la lineas y ya lo tenia hecho.

Y la parte para que no cuente los espacios y los puntos tambien ya casi habia descubierto como era, solo que me faltaba un pequeño detalle.

if (linea[1] <> " ") and (linea[1] <> ".") then

Yo tenia esto hecho, pero en la parte donde pone linea[1] yo no sabia que poner en ese sitio.

Pero, gracias por la ayuda.


06-Jan-2013 23:29
Antonio Rodrigues

Por cierto, te has equivocado en una cosa.

Aqui:

if (linea[1] <> " ") and (linea[1] <> ".") then

no es "linea[1]". Si pones esto no funciona bien. Tienes que poner "linea[i]" quedandose asi:

if (linea[i] <> " ") and (linea[i] <> ".") then






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)