fopen varios archivos
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 totalesnn", contador_total);
printf("%ld caracteres sin espaciosn", contador_caracteres);
printf("%ld espacios en blanconn", contador_espacios);
printf("%ld comasn", contador_comas);
printf("%ld puntosn", contador_puntos);
printf("%ld vocalesn", contador_vocales);
printf("%ld consonantesn", contador_consonantes);
printf("%ld otros caracteresnn", contador_otros);
printf("%ld palabrasn", contador_palabras);
printf("%ld lÃneasn", 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 totalesnn", contador_total);
printf("%ld caracteres sin espaciosn", contador_caracteres);
printf("%ld espacios en blanconn", contador_espacios);
printf("%ld comasn", contador_comas);
printf("%ld puntosn", contador_puntos);
printf("%ld vocalesn", contador_vocales);
printf("%ld consonantesn", contador_consonantes);
printf("%ld otros caracteresnn", contador_otros);
printf("%ld palabrasn", contador_palabras);
printf("%ld lÃneasn", contador_lineas);
return 0;
}
}
-Prueba esto:
#include <string.h>
//...
FILE *nombre;
char archivo[50];
char n[2];
int contador;
for(contador=0;contador<10;contador++){//prueba0.htm, prueba1.htm, ... a prueba9.htm
strncpy(archivo,"prueba ",7);//copia a archivo
n[1]=' ';
n[0]=contador+'0';
strncat(archivo,(const char*)n,2);//añade a archivo
strncat(archivo,".htm ",5);
nombre = fopen(archivo,"r");
if (nombre == NULL){
printf("El archivo no existe n");
exit (EXIT_FAILURE);
}
else{
fclose(nombre);
}
}
#include <string.h>
//...
FILE *nombre;
char archivo[50];
char n[2];
int contador;
for(contador=0;contador<10;contador++){//prueba0.htm, prueba1.htm, ... a prueba9.htm
strncpy(archivo,"prueba ",7);//copia a archivo
n[1]=' ';
n[0]=contador+'0';
strncat(archivo,(const char*)n,2);//añade a archivo
strncat(archivo,".htm ",5);
nombre = fopen(archivo,"r");
if (nombre == NULL){
printf("El archivo no existe n");
exit (EXIT_FAILURE);
}
else{
fclose(nombre);
}
}
Antes de nada trasgu, muchas gracias por preocuparte, la verdad es q sólo con tu respuesta ya me ha servido algo de ayuda.
te comento, he adaptado tu solución a mi código y lo q me sale es lo mismo q tenÃa anteriormente. creo q soy un poco malo explicándome, jeje.
t voy a decir el código completo q quiero hacer para ver si asà me explico un poco mejor y me puedes echar una mano. tengo varios artÃculos distintos y quiero ver la diferencia existentes entre ellos, para ello he creado el programa anterior q mandé q lo q hace es poner las caracterÃsticas de sólo un artÃculo. mi intención es ver como se van modificando esos 10 artÃculos para asà saber si varÃan mucho o poco. para ello pretendÃa hacer una matriz q explicase el número de caracteres q tiene cada uno de ellos pero q se vean todos al ejecutarlo. no sé si con ésto t he aclarado o te he enredado más, jeje. si puedes echarme otra mano t lo agradecerÃa porque la verdad es q estoy atascado.
de toas formas, muchas gracias por todo.
Un saludo
te comento, he adaptado tu solución a mi código y lo q me sale es lo mismo q tenÃa anteriormente. creo q soy un poco malo explicándome, jeje.
t voy a decir el código completo q quiero hacer para ver si asà me explico un poco mejor y me puedes echar una mano. tengo varios artÃculos distintos y quiero ver la diferencia existentes entre ellos, para ello he creado el programa anterior q mandé q lo q hace es poner las caracterÃsticas de sólo un artÃculo. mi intención es ver como se van modificando esos 10 artÃculos para asà saber si varÃan mucho o poco. para ello pretendÃa hacer una matriz q explicase el número de caracteres q tiene cada uno de ellos pero q se vean todos al ejecutarlo. no sé si con ésto t he aclarado o te he enredado más, jeje. si puedes echarme otra mano t lo agradecerÃa porque la verdad es q estoy atascado.
de toas formas, muchas gracias por todo.
Un saludo
-Para declarar una matriz de 10x10 elementos:
long contadores[10][10];
-dentro del primer corchete irÃa el número de elemento (0-9), dentro del segundo corchete el valor de cada contador (0-9)
-para hacer referencia por ejemplo al 2º elemento y al 3º contador y sumarle uno serÃa asÃ:
contadores[1][2]++;
long contadores[10][10];
-dentro del primer corchete irÃa el número de elemento (0-9), dentro del segundo corchete el valor de cada contador (0-9)
-para hacer referencia por ejemplo al 2º elemento y al 3º contador y sumarle uno serÃa asÃ:
contadores[1][2]++;
Prueba con esto:
char nombreArchivo[50]; // O el tamaño que necesites
int i;
for (i=1; i<numArchivos; i++)
{
sprintf(numbreArchivo, "Prueba%d.ext", i); /ext es la extension que quieras aplicar
//
// Aqui viene el codigo para procesar el archivo...
//
}
Esto te generará los nombres Prueba1.ext, Prueba2.ext, etc.
Espero que te sirva de ayuda.
Saludos,
char nombreArchivo[50]; // O el tamaño que necesites
int i;
for (i=1; i<numArchivos; i++)
{
sprintf(numbreArchivo, "Prueba%d.ext", i); /ext es la extension que quieras aplicar
//
// Aqui viene el codigo para procesar el archivo...
//
}
Esto te generará los nombres Prueba1.ext, Prueba2.ext, etc.
Espero que te sirva de ayuda.
Saludos,
Muchas gracias x la contestación Capitan Kirk, pero x lo q he visto no soy muy bueno explicándome porque otro compañero tampoco lo ha entendido. tendré q mejorar mi lenguaje, jeje. he dejao escrito lo q pretendo hacer con mi código x si quieres y puedes echarle un vistazo. Aún asà muchas gracias por todo, espero q con lo escrito ahora puedas ayudarme.
Un saludo
Un saludo
