Dado que en la memoria de la computadora ya está cargado un archivo binario “student.data” con el registro de 100 estudiantes, la tarea es leer el K-ésimo registro y realizar algunas operaciones.
seekg() es una función en la biblioteca iostream (parte de la biblioteca estándar) que le permite buscar una posición arbitraria en un archivo. Se utiliza en el manejo de archivos para establecer la posición del siguiente carácter que se extraerá del flujo de entrada de un archivo determinado. Por ejemplo :
Input: "Hello World" Output: World
La función tellg() se usa con flujos de entrada y devuelve la posición actual de «obtención» del puntero en el flujo. No tiene parámetros y devuelve un valor del tipo de miembro pos_type, que es un tipo de datos entero que representa la posición actual del puntero de flujo de obtención.
Enfoque:
dado que hay 100 registros en el archivo binario «student.dat» y K = 7
- Paso 1: La declaración fs.seekg(7*sizeof(student)) coloca el puntero de lectura en el índice 168(->7*22) del archivo (basado en la indexación basada en ‘0’)
- Paso 2: La instrucción fs.read((char*)this;sizeof(student)); lee el registro y ahora el puntero de lectura está al comienzo del octavo registro. Por lo tanto, la instrucción fs.tellg()/sizeof(s) da como resultado el valor 8 y la salida de “fs.tellg()/sizeof(s)+1” es 8 + 1 = 9
- Paso 3: La declaración fs.seekg(0, ios::end) coloca el puntero al final del archivo y, por lo tanto, fs.seekg(0, ios::end)/sizeof(s) da 100
A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ program to Read a record from a File // using seekg() and tellg() #include <bits/stdio.h> using namespace std; class student { int id; char Name[20]; public: void display(int K); }; void student::display(int K) { fstream fs; fs.open("student.dat", ios::in | ios::binary); // using seekg(pos) method // to place pointer at 7th record fs.seekg(K * sizeof(student)); // reading Kth record fs.read((char*)this, sizeof(student)); // using tellg() to display current position cout << "Current Position: " << "student no: " << fs.tellg() / sizeof(student) + 1; // using seekg()place pointer at end of file fs.seekg(0, ios::end); cout << " of " << fs.tellg() / sizeof(student) << endl; fs.close(); } // Driver code int main() { // Record number of the student to be read int K = 7; student s; s.display(K); return 0; }
Producción:
Current Position: student no: 9 of 100
Publicación traducida automáticamente
Artículo escrito por vinaychopra92vc y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA