Este artículo explica cómo modificar el contenido de un archivo binario.
Dado un archivo binario que contiene los registros de los estudiantes, la tarea es modificar o alterar el registro del estudiante especificado. Si no existe el registro de dicho estudiante, imprima «registro no encontrado».
Ejemplos:
Input: old roll no: 1 new roll no: 11 new name: "Geek" Output: roll no: 11 name: "Geek" record successfully modified Input: old roll no: 234 new roll no: 14 new name: "Geek2" Output: record not found
En este ejemplo, se toma del usuario el número de registro existente del estudiante cuyo registro se va a modificar y se crea un registro recién actualizado que reemplaza el registro anterior.
Acercarse:
- Paso 1: Búsqueda del número de rollo en el archivo binario.
- Paso 2: mientras busca en el archivo, la variable «pos» almacena la posición del registro del puntero del archivo y luego recorre (continúa) la lectura del registro.
- Paso 3: Si existe el número de rollo a buscar, coloque el puntero de escritura (al final del registro anterior), es decir, en la pos.
- Paso 4: Llame a la función getdata para tomar el nuevo registro.
- Paso 5: escriba el nuevo objeto en la posición «pos» y, por lo tanto, el registro se actualiza e imprime «registro actualizado con éxito».
- Paso 6: Si el número de rollo no existe, imprima «registro no encontrado».
Funciones de biblioteca estándar utilizadas:
// tells the position of read pointer file.tellg(); // places the writing pointer at // position "pos" in the file file.seekp(pos);
A continuación se muestra la implementación del enfoque anterior:
// C++ program to modify the content // of a binary file #include <bits/stdc++.h> using namespace std; class abc { int roll; char name[20]; public: void getdata(int, char[]); void update(int, int, char[]); void testcase1(); void testcase2(); void putdata(); }; // Code to display the data of the // data of the object void abc::putdata() { cout << "roll no: "; cout << roll; cout << "\nname: "; cout << name; } // Code to set the value to the object void abc::getdata(int a, char str[]) { // setting the new roll no roll = a; // setting new name strcpy(name, str); } void abc::update(int rno, int r, char str[]) { // code to update and modify // the content of the binary file int pos, flag = 0; // rno=9 fstream fs; fs.open("he.dat", ios::in | ios::binary | ios::out); while (!fs.eof()) { // storing the position of // current file pointeri.e. at // the end of previously read record pos = fs.tellg(); fs.read((char*)this, sizeof(abc)); if (fs) { // comparing the roll no with that // of the entered roll number if (rno == roll) { flag = 1; // setting the new (modified ) // data of the object or new record getdata(r, str); // placing the put(writing) pointer // at the starting of the record fs.seekp(pos); // writing the object to the file fs.write((char*)this, sizeof(abc)); // display the data putdata(); break; } } } fs.close(); if (flag == 1) cout << "\nrecord successfully modified \n"; else cout << "\nrecord not found \n"; } // Sample input 1 void abc::testcase1() { int rno, r; char name[20]; // roll no to be searched rno = 1; // new roll no r = 11; // new name strcpy(name, "Geek"); // call update function with new values update(rno, r, name); } // Sample input 2 void abc::testcase2() { int rno, r; char name[20]; // roll no to be searched rno = 4; // new roll no r = 14; // new name strcpy(name, "Geek2"); // call update function with the new values update(rno, r, name); } // Driver code int main() { abc s; // sample case 1 s.testcase1(); // sample case 2 s.testcase2(); return 0; }
Publicación traducida automáticamente
Artículo escrito por vinaychopra92vc y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA