elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como borro o modifico datos en un fichero?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como borro o modifico datos en un fichero?  (Leído 3,324 veces)
pedroedlp

Desconectado Desconectado

Mensajes: 17


Ver Perfil
como borro o modifico datos en un fichero?
« 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);

}



En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: como borro o modifico datos en un fichero?
« Respuesta #1 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.


En línea

pedroedlp

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: como borro o modifico datos en un fichero?
« Respuesta #2 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?
En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: como borro o modifico datos en un fichero?
« Respuesta #3 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
« Última modificación: 23 Abril 2014, 00:44 am por nolasco281 » En línea

Lo que se puede imaginar... se puede programar.
pedroedlp

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: como borro o modifico datos en un fichero?
« Respuesta #4 en: 23 Abril 2014, 02:16 am »

no se nada de c++, pero gracias igual
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: como borro o modifico datos en un fichero?
« Respuesta #5 en: 23 Abril 2014, 02:36 am »

Cambia primero los datos en memoria y cuando vayas a guardar reescribes todos y punto.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como modifico un archivo flash?
Diseño Gráfico
chupacabras 1 2,001 Último mensaje 14 Febrero 2005, 04:02 am
por ¤ Nerviozzo ¤
faq: como modifico el tiempo en los subtitulos .SRT?
Multimedia
fedexpirated 1 1,908 Último mensaje 21 Abril 2006, 21:29 pm
por Songoku
Virus. Se borro datos de mi Tarjeta Memoria
Seguridad
Stanave 5 9,517 Último mensaje 16 Mayo 2010, 21:59 pm
por octanus
Re: ¿ Como modifico el log para quitar un baneo de datos?
Dudas Generales
titoruben 2 4,475 Último mensaje 25 Agosto 2011, 14:59 pm
por titoruben
como modifico una distro
GNU/Linux
General Dmitry Vergadoski 4 2,809 Último mensaje 13 Mayo 2012, 23:54 pm
por portaro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines