Título: [Solucion] eliminar/editar contenido de un fichero
Publicado por: lordluisiv en 5 Mayo 2019, 16:01 pm
Buenas :) aqui esta la solucion, ahora guarda, carga y edita los datos :) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <cctype>
/*==================== [Defines] ======================*/ #define cls system("CLS"); #define File_OpenRead doc=fopen("DB_","r"); #define File_OpenWrite doc=fopen("DB_","a+"); /*==================== [Funciones] ======================*/ void guardar(); void cargar(); void buscar(); /*==================== [Base de Datos] ======================*/ FILE *doc; struct DATA{ char nombre[13]; int edad; };
/*==================== [Programa] ======================*/ int main() { fclose(doc); int selec; printf("1.Guardar \n2.Cargar \n3.Buscar \n"); fflush(stdin); selec = getch();
switch(selec){ case '1':{ cls guardar(); break; } case '2':{ cls cargar(); break; } case '3':{ buscar(); break; } } cls printf("[ESA OPCION NO EXISTE]\n"); main();
return 0; }
void guardar() { DATA e; int selec;
File_OpenWrite // abriendo el archivo.
if(doc == NULL) { cls printf("[ERROR EN EL ARCHIVO]\n"); main(); } do{ cls printf("Ingrese su nombre: "); fflush(stdin); gets(e.nombre);
for (char i = 0; i < strlen(e.nombre) ; i++){ e.nombre[i] = tolower(e.nombre[i]); }
printf("Ingrese su edad: "); fflush(stdin); scanf("%d", &e.edad);
printf("\n\n---Nombre:%s \n---edad: %d\n", e.nombre, e.edad); printf("\n\n1.desea finalizar el registro? \n2.Registrar otro usuario? \nElija una opcion porfavor: "); fflush(stdin); selec = getch(); fwrite(&e, sizeof(e),1,doc); }while(selec == '2');
fclose(doc); cls main(); }
void cargar() { File_OpenRead DATA e;
if(doc == NULL) { cls printf("[ERROR EN EL ARCHIVO]\n"); main(); }
fread(&e, sizeof(e),1,doc); while(!feof(doc)){ printf("\nNombre.....: %s", e.nombre); printf("\nEdad.........: %d", e.edad); fread(&e, sizeof(e),1,doc); }
printf("\n\nPrecione una tecla para volver...");
fclose(doc); getch(); cls main(); }
void buscar() { File_OpenWrite DATA e;
char b_nombre[13];
if(doc == NULL) { cls printf("[ERROR EN EL ARCHIVO]\n"); main(); } cls printf("Ingrese el nombre a buscar: \n");fflush(stdin); gets(b_nombre);
for (char i = 0; i < strlen(b_nombre) ; i++){ b_nombre[i] = tolower(b_nombre[i]); } cls
while(strcmp(e.nombre, b_nombre)){
fread(&e, sizeof(e),1,doc);
if(feof(doc)){ cls printf("[NO SE ENCONTRARON RESULTADOS]\n"); main(); } } printf("\nNombre.....: %s", e.nombre); printf("\nEdad.........: %d\n", e.edad); printf("\n\nPrecione una tecla para volver...");
fclose(doc); getch(); cls main(); }
Listo ya logre conseguir la solucion al problema y dejo la solucion aqui para los que necesiten hacer algo parecido..Funcion: Funciona creando un archivo temporar y mientras que no se encuentre el dato que estas buscando se van guardando los otros... void eliminar() { File_OpenRead FILE *d_temp; d_temp = fopen("DB_TEMP", "w"); DATA e; int b_cedula;
if(doc == NULL) { cls printf("[ERROR EN EL ARCHIVO]\n"); main(); }
cls printf("Escriba el numero de cedula del usuario que desea eliminar: "); fflush(stdin); scanf("%d", &b_cedula);
cls fread(&e, sizeof(e),1,doc);
while(!feof(doc)){
if((e.cedula == b_cedula)==0){ fwrite(&e, sizeof(e),1,d_temp); }else{ printf("Estos datos han sido eliminados..."); printf("\nNombre.....: %s", e.nombre); printf("\nCedula.....: %d", e.cedula); printf("\nEdad.......: %d\n", e.edad); }
fread(&e, sizeof(e),1,doc); } printf("\n\nPrecione una tecla para volver...");
fclose(d_temp); fclose(doc); remove("DB_"); rename("DB_TEMP", "DB_"); getch(); cls main(); }
|