Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pedroedlp en 21 Abril 2014, 23:52 pm



Título: como borro o modifico datos en un fichero?
Publicado por: pedroedlp en 21 Abril 2014, 23:52 pm
Hola estoy haciendo un programa que lo que hace es guardar datos de productos en un fichero, pero no se como hacer para borrar o modificar estos datos, osea no se como hacer la funcion que realice esto, les dejo el codigo...

Código:

#include <stdio.h>

typedef struct producto{
    char nombre[20];
    char fabricante[20];
    char descripcion[50];
    int precio;
} producto ;


void imprimirMenu(void);
void nuevoProducto(char *nombreArchivo);
void borrarProducto();
void modificarProducto();
void verProducto();


int main(){

    char *nombreArchivo="productos.dat";
    int opcion;

    imprimirMenu();
    fflush(stdin);
    scanf("%d", &opcion);

    switch (opcion){

        case 1: nuevoProducto(nombreArchivo);
        case 2: borrarProducto();
        case 3: modificarProducto();
        case 4: verProducto();
       
        default: printf("\n\nOpcion incorrecta");
       
    }


    printf("\n\n");

    return 0;
}


void imprimirMenu(void){
    printf("\n----Almacen----");
    printf("\n\n-Menu: ");
    printf("\n1-Nuevo producto\n2-Borrar producto\n3-Modificar producto\n4-Ver producto\n\nOpcion: ");
}

void nuevoProducto(char *nombreArchivo){

    system("cls");

    FILE *pf;

    if((pf=fopen(nombreArchivo, "a"))==NULL){
        printf("\nNo se pudo abrir el archivo");
        exit (-1);
    }

    producto p;

    printf("\nNombre: ");
    fflush(stdin);
    gets(p.nombre);
    printf("\nFabricante: ");
    fflush(stdin);
    gets(p.fabricante);
    printf("\nDescripcion: ");
    fflush(stdin);
    gets(p.descripcion);
    printf("\nPrecio: ");
    fflush(stdin);
    scanf("%d", &p.precio);

    fputs("Nombre: ", pf);
    fputs(p.nombre, pf);
    fputs("\nFabricante: ", pf);
    fputs(p.fabricante, pf);
    fputs("\nDescripcion: ", pf);
    fputs(p.descripcion, pf);
    fputs("\nPrecio: ", pf);
    fprintf(pf, "%d\n\n", p.precio);

}



Título: Re: como borro o modifico datos en un fichero?
Publicado por: eferion en 22 Abril 2014, 09:11 am
Si quieres borrar un registro tienes dos opciones:

* Reescribes completamente el fichero evitando guardar el registro borrado.

* con fseek te colocas al inicio del registro y sobreescribes su contenido de tal forma que al leerlo puedas identificarlo como un registro borrado y puedas ignorarlo ( por ejemplo dejando el nombre vacío ).

Si quieres modificar un registro tienes también dos opciones:

* Reescribes completamente el fichero con los nuevos datos.

* con fseek te colocas al inicio del registro y sobreescribes su contenido con la información actual.

Como ves la opción elegida te sirve para ambos cometidos. La primera es más sencilla de implementar pero también más lenta... la segunda es más rápida y eficiente... pero requiere algo más de código por tu parte.


Título: Re: como borro o modifico datos en un fichero?
Publicado por: pedroedlp en 22 Abril 2014, 23:56 pm
Si quieres borrar un registro tienes dos opciones:

* Reescribes completamente el fichero evitando guardar el registro borrado.

* con fseek te colocas al inicio del registro y sobreescribes su contenido de tal forma que al leerlo puedas identificarlo como un registro borrado y puedas ignorarlo ( por ejemplo dejando el nombre vacío ).

Si quieres modificar un registro tienes también dos opciones:

* Reescribes completamente el fichero con los nuevos datos.

* con fseek te colocas al inicio del registro y sobreescribes su contenido con la información actual.

Como ves la opción elegida te sirve para ambos cometidos. La primera es más sencilla de implementar pero también más lenta... la segunda es más rápida y eficiente... pero requiere algo más de código por tu parte.

pero si me pongo con fseek en donde comienza el archivo como cambio por ejemplo el producto que esta en el medio?


Título: Re: como borro o modifico datos en un fichero?
Publicado por: nolasco281 en 23 Abril 2014, 00:37 am
Como ya te comento eferion hay esas dos formas de hacer

en C++ seria algo como esto y es la segunda forma de hacerlo

Código
  1. int eliminar()
  2. {
  3.    // 1. Abrir archivo.
  4.    fstream archivo("Clientes.bin",
  5.            ios::out | ios::in | ios::binary);
  6.  
  7. // Validar apertura de archivo.
  8.    if(!archivo) // Condicion de error.
  9.         return 0; // Cero significa error.
  10.  
  11.    // Leer datos.
  12.    Cliente registroVacio;
  13.    int idbuscar;
  14.  
  15.    interfaceDatos();    //Funcion para el menu de opciones
  16.  
  17.    // Solicitud clave de búsqueda.
  18.    cout << setxy(38, 4);
  19.    clreol(); // Borrar linea.
  20.    cin >> idbuscar;                  //Busca el registro a borrar
  21.    cin.ignore();
  22.  
  23.    while(idbuscar > 0) // Centinela
  24.    {
  25.         // Posicionamiento de lectura.  //seekp      
  26.         archivo.seekp(
  27.         (idbuscar - 1) * sizeof(Cliente));
  28.  
  29.         // escritura de datos.
  30.         archivo.write(
  31.         reinterpret_cast<const char *>(&registroVacio),
  32.         sizeof(Cliente));                  
  33.  
  34.         // Solicitud clave de búsqueda.
  35.         cout << setxy(38, 4);
  36.         clreol(); // Borrar linea.
  37.         cin >> idbuscar;
  38.         cin.ignore();
  39.    } // Fin while
  40.  
  41.    // 3. Cerrar archivo.
  42.    archivo.close();
  43.    return 1;
  44. }

espero averte ayudado saludos.

PD:: el de modificar es casi lo mismo


Título: Re: como borro o modifico datos en un fichero?
Publicado por: pedroedlp en 23 Abril 2014, 02:16 am
no se nada de c++, pero gracias igual


Título: Re: como borro o modifico datos en un fichero?
Publicado por: amchacon en 23 Abril 2014, 02:36 am
Cambia primero los datos en memoria y cuando vayas a guardar reescribes todos y punto.