Domingo 22 de Diciembre de 2024, 22:06
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemas Con Ficheros
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problemas Con Ficheros (Leído 1655 veces)
franc
Miembro MUY activo
Mensajes: 157
Problemas Con Ficheros
«
en:
Jueves 29 de Abril de 2004, 15:11 »
0
Buenas !!
Tengo un problema, estoy empezando a estudiar los ficheros y me encuentro con muchos problemas. Bueno os pongo este problema que tengo y si me ayudais os lo agradecere mucho
Esto es un simple programa que lee una cadena ( 5 palabras ), lo almacena en un archivo llamado "Texto.txt"·.Luego lee este archivo y si encuentra cierta palabra ( introducida por el usuario ) la sustituye por otra ( tb introducida por el usuario ) y va copiando el texto a otro archivo ("Texto2.txt") de tal forma q quede en texto2.txt el texto inicial pero con las sustituciones.
Mi problema es que si por ejemplo, pongo la cadena "Esto es una piuta mierda" y sustituyo "mierda" por "basura", a la hora de leer el fichero resultado... me imprime "Esto es una piuta mierda mierda". Es decir, el bucle while se me repite una vez mas de lo normal.. La condicion de salida del while es !feof(f) donde f es el canal del archivo de lectura.
Aki os dejo el codigo
Código: Text
#include < stdio.h >
#include < conio.h >
#include < process.h >
#include < string.h >
void main()
{
FILE *f,*g;
char cad[80],palabra[10],sustituir[10];
char cad2[80];
int aux,cont=0;
if(!(f=fopen("texto.txt","rt")))
{
puts("Error !");
exit(1);
}
if(!(g=fopen("texto2.txt","w+t")))
{
puts("Error !");
exit(1);
}
printf("Introduce la palabra que quieres sustituir: ");
scanf("%s",&palabra);
printf("\n\nIntroduce la palabra por la que la quieres sustituir: ");
scanf("%s",&sustituir);
while (!feof(f))
{ // leer en archivo.
fscanf(f,"%s",cad);
aux=strcmp(cad,palabra);
if (aux==0)
{
fprintf(g," %s",sustituir);
cont++;
}else{
fprintf(g," %s",cad);
}
}
rewind(g);
printf("\n\nTexto resultante: ");
while(!feof(g))
{ // leer en archivo.
fscanf(g,"%s",cad2);
printf("%s ",cad2);
}
rewind(f);
printf("\n\nTexto inical: ");
while(!feof(f))
{ // leer en archivo.
fscanf(f,"%s",cad2);
printf("%s ",cad2);
}
printf("\n\nSustituciones: %d",cont);
fclose(f);
fclose(g);
}
Tweet
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Problemas Con Ficheros
«
Respuesta #1 en:
Jueves 29 de Abril de 2004, 16:59 »
0
Hola.
El problema es que en la última iteración, cuando intentas leer y ya no lee nada, imprimes lo que leiste la iteración anterior. Esto es debido a que feof no devuelte TRUE hasta que no se ha intentado leer y no se ha leido nada. Puedes solucionarlo comprobando el retorno de fscanf. Si retorna 1 es que ha leido una palabra con éxito. Si retorna 0 es que no la ha leido y no debería ejecutarse printf o fprintf.
Un saludo.
Ruben3d
Personal
|
LinkedIn
franc
Miembro MUY activo
Mensajes: 157
Re: Problemas Con Ficheros
«
Respuesta #2 en:
Jueves 29 de Abril de 2004, 21:36 »
0
quieres decir esto ?
Código: Text
while(!feof(f))
{ // leer en archivo.
if (fscanf(f,"%s",cad2)) printf("%s ",cad2);
}
si dices asi, no me va
no te entiendo
help me xfavor
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Problemas Con Ficheros
«
Respuesta #3 en:
Jueves 29 de Abril de 2004, 21:43 »
0
Sí, eso mismo. Pero hazlo en cada sitio en el que la condición de un bucle incluya feof y dentro del cuerpo esté un fscanf.
Un saludo.
Ruben3d
Personal
|
LinkedIn
franc
Miembro MUY activo
Mensajes: 157
Re: Problemas Con Ficheros
«
Respuesta #4 en:
Jueves 29 de Abril de 2004, 22:16 »
0
hmmm tal y como tu dices quedaria asi:
Código: Text
#include < stdio.h >
#include < conio.h >
#include < process.h >
#include < string.h >
void main()
{
FILE *f,*g;
char cad[80],palabra[10],sustituir[10];
char cad2[80];
int aux,cont=0;
if(!(f=fopen("texto.txt","rt")))
{
puts("Error !");
exit(1);
}
if(!(g=fopen("texto2.txt","w+t")))
{
puts("Error !");
exit(1);
}
printf("Introduce la palabra que quieres sustituir: ");
scanf("%s",&palabra);
printf("\n\nIntroduce la palabra por la que la quieres sustituir: ");
scanf("%s",&sustituir);
while (!feof(f))
{ // leer en archivo.
if (fscanf(f,"%s",cad))
{
aux=strcmp(cad,palabra);
if (aux==0)
{
fprintf(g," %s",sustituir);
cont++;
}else{
fprintf(g," %s",cad);
}
}
}
rewind(g);
printf("\n\nTexto resultante: ");
while(!feof(g))
{ // leer en archivo.
if (fscanf(g,"%s",cad2)) printf("%s ",cad2);
}
rewind(f);
printf("\n\nTexto inical: ");
while(!feof(f))
{ // leer en archivo.
if (fscanf(f,"%s",cad2)) printf("%s ",cad2);
}
printf("\n\nSustituciones: %d",cont);
fclose(f);
fclose(g);
}
sigue pasandome lo mismo
Ruben3d
Miembro HIPER activo
Mensajes: 710
Nacionalidad:
Re: Problemas Con Ficheros
«
Respuesta #5 en:
Jueves 29 de Abril de 2004, 22:25 »
0
Yo tuve un problema como el tuyo (se me duplicaba lo último que leia) y se me arregló haciendo eso. Si te sigue fallando y no es de eso no veo el porqué, tengo espesura mental. A ver si alguien te encuentra el fallo.
Un saludo.
Ruben3d
Personal
|
LinkedIn
franc
Miembro MUY activo
Mensajes: 157
Re: Problemas Con Ficheros
«
Respuesta #6 en:
Jueves 29 de Abril de 2004, 22:28 »
0
gracias de todas maneras, si alguien me puede ayudar se lo agradeceria muchisimo.
GRACIAS
franc
Miembro MUY activo
Mensajes: 157
Re: Problemas Con Ficheros
«
Respuesta #7 en:
Jueves 29 de Abril de 2004, 22:58 »
0
ya pilllé el fallo, vaya tonteria
cuando escribia la frase a sustituir, la almacenaba con un espacio al final de la cadena, entonces el bucle se repetia una vez de mas por ese espacio.
Gracias por tu ayuda Ruben3d
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemas Con Ficheros