fopen varios archivos
Publicado por ruben (1 intervención) el 07/04/2010 13:16:24
Hola.
Soy nuevo por aquí en cuánto a pedir ayuda pero sin embargo muchos ejemplos y respuestas me han solucionado otras muchas dudas que he tenido.
Comento mi problema. Tengo el siguiente código con el que abro un archivo de texto cualquiera y me lo lee y dice el número de caracteres y otras características que tiene. Pero lo que quiero hacer y no consigo es abrir varios archivos que se llamen igual pero poniéndole una numeración, es decir, en este caso mi archivo se llama prueba.htm, y lo que quiero es que me lea 10 archivos distintos y que me guarde las características de cada uno de ellos (prueba1.htm, prueba2.htm, ...). Lo he probado con un bucle for pero me da problemas. ¿Me podríais dar algún consejo?
Muchas gracias.
Un saludo
#include <stdio.h>
#include <stdlib.h>
int separador (int x)
{
return (x==' ') || (x=='\t') || (x=='\n');
}
int main ()
{
long contador_caracteres;
long contador_palabras;
long contador_lineas;
long contador_espacios;
long contador_total;
long contador_comas;
long contador_puntos;
long contador_vocales;
long contador_consonantes;
long contador_otros;
FILE *nombre;
int c;
int actual;
int prev;
// Inicialización de los contadores
contador_total = -2;
contador_espacios = 0;
contador_caracteres = 0;
contador_comas = 0;
contador_puntos = 0;
contador_vocales = 0;
contador_consonantes = 0;
contador_palabras = -1;
contador_lineas = 0;
contador_otros = 0;
// Lectura de los datos de entrada
nombre = fopen("prueba.htm", "r");
prev = ' ';
if (nombre == NULL)
{
printf("El archivo no existe \n");
exit (EXIT_FAILURE);
}
else
{
while (c != EOF)
{
c = getc(nombre); /* Obtiene un caracter del archivo */
putchar(c); /* Lo despliega en pantalla y continua... */
contador_total++;
// Espacios en blanco
if (c==' ')
contador_espacios++;
// Comas
if (c==',')
contador_comas++;
// Puntos
if (c=='.')
contador_puntos++;
// ¿Fin de línea?
if (c=='\n')
contador_lineas++;
// Vocales
if (c=='a' || c=='A' || c=='á' || c=='e' || c=='E' || c=='é'|| c=='i' || c=='I' || c=='í' || c=='o' || c=='O' || c=='ó'|| c=='u' || c=='U' || c=='ú')
contador_vocales++;
// Consonantes
if (c=='b' || c=='B' || c=='c' || c=='C' || c=='d' || c=='D' || c=='f' || c=='F' || c=='g' || c=='G' || c=='h' || c=='H' || c=='j' || c=='J' || c=='k' || c=='K' || c=='l' || c=='L' || c=='m' || c=='M' || c=='n' || c=='N' || c=='p' || c=='P' || c=='q' || c=='Q' || c=='r' || c=='R' || c=='s' || c=='S' || c=='t' || c=='T' || c=='v' || c=='V' || c=='w' || c=='W' || c=='x' || c=='X' || c=='y' || c=='Y' || c=='z' || c=='Z')
contador_consonantes++;
// ¿Comienzo de una nueva palabra?
if (!separador(c) && separador(prev))
contador_palabras++;
// Siguiente carácter
prev = c;
}
fclose(nombre);
contador_caracteres=contador_total-contador_espacios;
contador_otros=contador_caracteres-contador_vocales-contador_consonantes-contador_comas-contador_puntos;
// Resultado
printf("\n%ld caracteres totales\n\n", contador_total);
printf("%ld caracteres sin espacios\n", contador_caracteres);
printf("%ld espacios en blanco\n\n", contador_espacios);
printf("%ld comas\n", contador_comas);
printf("%ld puntos\n", contador_puntos);
printf("%ld vocales\n", contador_vocales);
printf("%ld consonantes\n", contador_consonantes);
printf("%ld otros caracteres\n\n", contador_otros);
printf("%ld palabras\n", contador_palabras);
printf("%ld líneas\n", contador_lineas);
return 0;
}
}
Soy nuevo por aquí en cuánto a pedir ayuda pero sin embargo muchos ejemplos y respuestas me han solucionado otras muchas dudas que he tenido.
Comento mi problema. Tengo el siguiente código con el que abro un archivo de texto cualquiera y me lo lee y dice el número de caracteres y otras características que tiene. Pero lo que quiero hacer y no consigo es abrir varios archivos que se llamen igual pero poniéndole una numeración, es decir, en este caso mi archivo se llama prueba.htm, y lo que quiero es que me lea 10 archivos distintos y que me guarde las características de cada uno de ellos (prueba1.htm, prueba2.htm, ...). Lo he probado con un bucle for pero me da problemas. ¿Me podríais dar algún consejo?
Muchas gracias.
Un saludo
#include <stdio.h>
#include <stdlib.h>
int separador (int x)
{
return (x==' ') || (x=='\t') || (x=='\n');
}
int main ()
{
long contador_caracteres;
long contador_palabras;
long contador_lineas;
long contador_espacios;
long contador_total;
long contador_comas;
long contador_puntos;
long contador_vocales;
long contador_consonantes;
long contador_otros;
FILE *nombre;
int c;
int actual;
int prev;
// Inicialización de los contadores
contador_total = -2;
contador_espacios = 0;
contador_caracteres = 0;
contador_comas = 0;
contador_puntos = 0;
contador_vocales = 0;
contador_consonantes = 0;
contador_palabras = -1;
contador_lineas = 0;
contador_otros = 0;
// Lectura de los datos de entrada
nombre = fopen("prueba.htm", "r");
prev = ' ';
if (nombre == NULL)
{
printf("El archivo no existe \n");
exit (EXIT_FAILURE);
}
else
{
while (c != EOF)
{
c = getc(nombre); /* Obtiene un caracter del archivo */
putchar(c); /* Lo despliega en pantalla y continua... */
contador_total++;
// Espacios en blanco
if (c==' ')
contador_espacios++;
// Comas
if (c==',')
contador_comas++;
// Puntos
if (c=='.')
contador_puntos++;
// ¿Fin de línea?
if (c=='\n')
contador_lineas++;
// Vocales
if (c=='a' || c=='A' || c=='á' || c=='e' || c=='E' || c=='é'|| c=='i' || c=='I' || c=='í' || c=='o' || c=='O' || c=='ó'|| c=='u' || c=='U' || c=='ú')
contador_vocales++;
// Consonantes
if (c=='b' || c=='B' || c=='c' || c=='C' || c=='d' || c=='D' || c=='f' || c=='F' || c=='g' || c=='G' || c=='h' || c=='H' || c=='j' || c=='J' || c=='k' || c=='K' || c=='l' || c=='L' || c=='m' || c=='M' || c=='n' || c=='N' || c=='p' || c=='P' || c=='q' || c=='Q' || c=='r' || c=='R' || c=='s' || c=='S' || c=='t' || c=='T' || c=='v' || c=='V' || c=='w' || c=='W' || c=='x' || c=='X' || c=='y' || c=='Y' || c=='z' || c=='Z')
contador_consonantes++;
// ¿Comienzo de una nueva palabra?
if (!separador(c) && separador(prev))
contador_palabras++;
// Siguiente carácter
prev = c;
}
fclose(nombre);
contador_caracteres=contador_total-contador_espacios;
contador_otros=contador_caracteres-contador_vocales-contador_consonantes-contador_comas-contador_puntos;
// Resultado
printf("\n%ld caracteres totales\n\n", contador_total);
printf("%ld caracteres sin espacios\n", contador_caracteres);
printf("%ld espacios en blanco\n\n", contador_espacios);
printf("%ld comas\n", contador_comas);
printf("%ld puntos\n", contador_puntos);
printf("%ld vocales\n", contador_vocales);
printf("%ld consonantes\n", contador_consonantes);
printf("%ld otros caracteres\n\n", contador_otros);
printf("%ld palabras\n", contador_palabras);
printf("%ld líneas\n", contador_lineas);
return 0;
}
}
Valora esta pregunta


0