Autor
|
Tema: como borro o modifico datos en un fichero? (Leído 3,276 veces)
|
pedroedlp
Desconectado
Mensajes: 17
|
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... #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
Mensajes: 1.248
|
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
Mensajes: 17
|
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
Mensajes: 319
|
Como ya te comento eferion hay esas dos formas de hacer en C++ seria algo como esto y es la segunda forma de hacerlo int eliminar() { // 1. Abrir archivo. fstream archivo("Clientes.bin", ios::out | ios::in | ios::binary); // Validar apertura de archivo. if(!archivo) // Condicion de error. return 0; // Cero significa error. // Leer datos. Cliente registroVacio; int idbuscar; interfaceDatos(); //Funcion para el menu de opciones // Solicitud clave de búsqueda. cout << setxy(38, 4); clreol(); // Borrar linea. cin >> idbuscar; //Busca el registro a borrar cin.ignore(); while(idbuscar > 0) // Centinela { // Posicionamiento de lectura. //seekp archivo.seekp( (idbuscar - 1) * sizeof(Cliente)); // escritura de datos. archivo.write( reinterpret_cast<const char *>(®istroVacio), sizeof(Cliente)); // Solicitud clave de búsqueda. cout << setxy(38, 4); clreol(); // Borrar linea. cin >> idbuscar; cin.ignore(); } // Fin while // 3. Cerrar archivo. archivo.close(); return 1; }
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
Mensajes: 17
|
no se nada de c++, pero gracias igual
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Cambia primero los datos en memoria y cuando vayas a guardar reescribes todos y punto.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como modifico un archivo flash?
Diseño Gráfico
|
chupacabras
|
1
|
1,972
|
14 Febrero 2005, 04:02 am
por ¤ Nerviozzo ¤
|
|
|
faq: como modifico el tiempo en los subtitulos .SRT?
Multimedia
|
fedexpirated
|
1
|
1,878
|
21 Abril 2006, 21:29 pm
por Songoku
|
|
|
Virus. Se borro datos de mi Tarjeta Memoria
Seguridad
|
Stanave
|
5
|
9,472
|
16 Mayo 2010, 21:59 pm
por octanus
|
|
|
Re: ¿ Como modifico el log para quitar un baneo de datos?
Dudas Generales
|
titoruben
|
2
|
4,443
|
25 Agosto 2011, 14:59 pm
por titoruben
|
|
|
como modifico una distro
GNU/Linux
|
General Dmitry Vergadoski
|
4
|
2,775
|
13 Mayo 2012, 23:54 pm
por portaro
|
|