[ Foro de C ]

Tengo un problema al modifiacar un string de un archivo .txt

29-Jun-2015 22:19
Invitado (Cesar Matias)
2 Respuestas

Buenas, tengo un pequeño problema con el siguiente codido. El problema se presenta cuando yo quiero remplazar un string de un archivo .txt (por ejemplo de tamaño 10) por uno de menor longitud (por ejemplo un string de tamaño 5).
al finaliza la ejecución, cuando habro el .txt me parecen el nuevo string pero en un salto de linea me aparecen lo que contenia antes (desde la pocicion 6 hasta el 10).
el tema de las pociciones es de ejemplo.

le/s comparto el codigo.
desde ya muchas gracias...

 
#include <stdio.h>
#include <string.h>
 
struct info {
	char nombre[50];
	char apellido[50];		
} informacion[2],auxi ;
 
void limpiar_enter(char dato[]);
 
int main(int argc, char **argv)
{
	int i;
	char aux[50];
	FILE *fp = fopen("registro_clientes.txt" , "w");
	for (i = 0; i < 2; i++)
	{
		printf("Ingrese nombre: ");
		fgets(aux, 50, stdin);
		limpiar_enter(aux);
		strcpy(informacion[i].nombre, aux);
		printf("Ingrese apellido: ");
		fgets(aux, 50, stdin);
		limpiar_enter(aux);
		strcpy(informacion[i].apellido, aux);		
	}
	for (i = 0; i < 2; i++)
	{
		fprintf(fp, "%s\n", informacion[i].nombre);
		fprintf(fp, "%s\n", informacion[i].apellido);		
	}
	fclose(fp);
 
	puts("El arcihvo se ha cerrado");
	puts("--------------------------------------------------------------------");
	puts("El arcihvo se ha abrierto para modificaciones");
 
 
	fp = fopen("registro_clientes.txt" , "r+");
	i = 0;
	while (!feof(fp)) 
	{
		if (!feof(fp))
		{
			fscanf(fp,"%[A-Z a-z 0-9]\n%[A-Z a-z 0-9]\n",  informacion[i].nombre,  informacion[i].apellido);	
			i++;
		}
	}
	printf("Ingrese nuevo nombre: ");
	fgets(aux, 50, stdin);
	limpiar_enter(aux);
	strcpy(informacion[0].nombre, aux);				
 
	printf("Ingrese nuevo apellido: ");
	fgets(aux, 50, stdin);
	limpiar_enter(aux);
	strcpy(informacion[0].apellido, aux);			
	rewind(fp);	
 
	for (i = 0; i < 2; i++)
	{
			fprintf(fp, "%s\n", informacion[i].nombre);
			fprintf(fp, "%s\n", informacion[i].apellido);	
	}
 
	fclose(fp);
	return 0;
}
 
void limpiar_enter(char dato[]){
	int i = 0;
	while (dato[i] != '\0')
	{
		if (dato[i] == '\n')
		{
			dato[i] = '\0';
		}
		i++;
	}
 


 


04-Jul-2015 21:56
Nacho Cabanes (+30)

Claro. Si escribes sobre el mismo fichero de texto pero vuelcas datos de menor longitud, tendrás ese problema. ¿No te merece la pena volcar a otro fichero y luego renombrarlo, o al menos vaciar el fichero de destino antes de volcar los datos?


07-Jul-2015 01:48
Matias Curiqueo

Creo que con volcarlo a otro fichero y luego renombrarlo estara bien.
Gracias, Disculpa las molestias... :)






(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.)