[ Foro de Pascal ]
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 ???
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.
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 ??
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);
....
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.
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.)