C/Visual C - como sacar datos basura de archivos?

   
Vista:

como sacar datos basura de archivos?

Publicado por MarcosCOB marcossanchezjames@hotmail.com (4 intervenciones) el 02/11/2011 00:50:41
Hola, tengo un problema, y es que cuando guardo las estructuras en un archivo de acceso directo en C, junto con la misma se me guardan muchos datos basuras entre los espacios que me quedan en blanco de los campos. bueno espero que alguien me pueda ayudar, aca dejo el codigo:
#include <stdio.h> //Bibliotecas incluidas
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

struct Clientes{int NumeroDeCliente; //Estructura Clientes o registro
char Nombre[35];
char LetraSexo[2];
char FdeNac[9];
char NdeDoc[8];
char Domicilio[35];
char Localidad[35];
char CodigoPostal[10];
char TelF[12];
char TelM[15];
char Correo [40];
};
FILE *punteroDeArchivo; //Puntero de archivo definido como global
#define ARCHIVO "DIRECCION.DAT" //Nombre del archivo
int CantReg = 0; //Es el numero en bytes de clientes
int main (void);
void BorrarPantalla(void);
void ClientesAltas(struct Clientes Altas);
void ClientesConsulta(struct Clientes Altas); //Prototipo
void AnadiraArchivo(struct Clientes Altas);
/*****************************************************************************/
void BorrarPantalla(void) //Borra la pantalla...
{ int contador; //...imprimiendo 30 lineas en blanco
for(contador=0;contador<30;contador++)
{printf("\n");}
return;
}
/*****************************************************************************/
void ClientesAltas(struct Clientes Altas) //Entra los caracteres del teclado
{ fflush(stdin); //vacia el buffer de entrada
fflush(stdout); //vacia el buffer de salida
BorrarPantalla();


printf("\nNombre completo: ");
gets(Altas.Nombre);
printf("\nSexo(M/F): ");
gets(Altas.LetraSexo);
printf("\nFecha de nacimiento (dd/mm/aa): ");
gets(Altas.FdeNac);
printf("\nNumero de documento: ");
gets(Altas.NdeDoc);
printf("\nDomicilio: "); //Obtiene los datos ingresados por el usuario mediante...
gets(Altas.Domicilio); //... el teclado
printf("\nLocalidad: ");
gets(Altas.Localidad);
printf("\nCodigo postal: ");
gets(Altas.CodigoPostal);
printf("\nTelefono fijo/aleatorio: ");
gets(Altas.TelF);
printf("\nTelefono movil: ");
gets(Altas.TelM);
printf("\nCorreo electronico: ");
gets(Altas.Correo);
AnadiraArchivo(Altas); //Pasa la variable Altas como parametro para guardar...



fflush(stdin); //... la estructura o registro
return;
}
/******************************************************************************/
void ClientesConsulta(struct Clientes Altas) //Consulta un cliente
{ int contC;
if((punteroDeArchivo = fopen("DIRECCION.DAT", "r"))==NULL) //Verifica que exista el arhivo y lo crea
{printf("\nERROR: No se ha podido leer el archivo");
goto princ;} //Si el archivo no se puede leer vuelve a Main()
fseek(punteroDeArchivo, 0L, SEEK_SET); //Situa al puntero de archivo al comienzo de este
printf("\nIngrese el Numero De cliente que desea consultar:");
scanf(" %d", &contC);
while (contC =! feof(punteroDeArchivo)) //Verifica que no sea el fin del archivo
{if(contC == Altas.NumeroDeCliente)
{fread(&Altas, sizeof(Altas), 1, punteroDeArchivo); //Lee el registro y lo muestra en pantalla
goto princ;}
return;
}
princ: main();
return;
}
/******************************************************************************/
void AnadiraArchivo(struct Clientes Altas){ //Graba un cliente

int contador = 1;
fflush(stdin); //Vacia el buffer de entrada de memoria
fflush(stdout); //Vacia el buffer de salida de memoria
Clientes *memoria; //Puntero para el uso de malloc y free
memoria = (Clientes *) malloc (sizeof (Clientes)); //Reserva el espacio en memoria para trabajar
if((punteroDeArchivo = fopen("DIRECCION.DAT", "a+"))==NULL) //Si el archivo no existe se creara uno nuevo.
{printf("\nATENCION: El archivo fue creado ya que no existia");
return;}
fseek(punteroDeArchivo, 1L, SEEK_END); //Situa al puntero de archivo al final del mismo
Altas.NumeroDeCliente = ftell(punteroDeArchivo); //Calcula el tamaño del archivo
printf("\nNumero de cliente:");
printf(" %d", Altas.NumeroDeCliente);
fwrite(&Altas, sizeof(Altas), contador, punteroDeArchivo); //Graba la estructura
printf("\n\nEl Cliente ha sido dado de alta exitosamente");
fclose(punteroDeArchivo); //Cierra el archivo
free (memoria); //Libera la memoria utilizada
goto princ;
princ: main();
}
/******************************************************************************/
int main () //Funcion principal main()
{ struct Clientes Altas; //Variable de estructura tipo Clientes
//struct Clientes;
int respuesta; //Respuesta del primer menu de opciones
int SegundaRespuesta; //Respuesta del sub menu de opciones
printf("\n\t\t\tHELL WAS MADE IN HEAVEN 1.0\n\n");
printf("\nMenu Principal:"); //Menu PRINCIPAL
printf("\n1.Clientes");
printf("\n2.Stock");
printf("\n3.Proveedores");
printf("\n4.Resumenes");
printf("\n5.Salir\n");
scanf(" %d", &respuesta);
switch (respuesta)
{
case (1):{ BorrarPantalla();
printf("\nCLIENTES");
printf("\n1.Altas de Clientes");
printf("\n2.Consultar Clientes/Modificar Cliente");
printf("\n3.Baja de Clientes");
printf("\n4.Asientos");
printf("\n5.Cuenta corriente"); //Submenu
printf("\n6.Volver al menu principal\n");
fflush(stdin);
fflush(stdout);
scanf(" %d", &SegundaRespuesta);
switch(SegundaRespuesta){
case (1):{ClientesAltas(Altas);
break;}
case (2):{ClientesConsulta(Altas);
break;}
default :{printf("Opcion invalida");
break;}
}
}

default :{printf("\nLa opcion ingresada no es correcta");
break;}
}
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

como sacar datos basura de archivos?

Publicado por Tom (480 intervenciones) el 02/11/2011 11:27:16
Inicializa a blancos (o a 0) todos los campos char ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como sacar datos basura de archivos?

Publicado por Marcos marcossanchezjames@hotmail.com (4 intervenciones) el 02/11/2011 14:26:41
Los inicialize y tampoco se me guardan bien...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como sacar datos basura de archivos?

Publicado por Pepe (3 intervenciones) el 05/11/2011 02:44:58
Hola

Debes iniciar los campos, pero no vasta con hacer Altas.Nombre[0]=0. Desbes escribir toda la memoria, y la forma más fácil es con la función

void * memset ( void * ptr, int value, size_t num );

en el método ClientesAltas, antes de recoger los datos del teclado, añades

memset(&Altas,0,sizeof(Altas));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

como sacar datos basura de archivos?

Publicado por Marcos marcossanchezjames@hotmail.com (4 intervenciones) el 06/11/2011 04:38:05
Ah, no tenia idea de que era asi. Muchas gracias pepe, ahora los datos se me guardan en forma correcta. De nuevo gracias, es muy importante saber esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar