Ejemplo de Ficheros Binarios en C++. Crear un Fichero Binario de Sueldos

En esta entrada vamos a leer el contenido de un fichero binario y vamos a crear un nuevo fichero binario donde escribiremos los registros del fichero original que cumplan una determinada condición.

Programa C++ que lee el fichero binario empleados.dat creado en una entrada anterior y crea un fichero binario sueldos2.dat que contendrá únicamente los empleados cuyo sueldo sea superior a 2000€
Los datos de cada empleado se han escrito en el fichero utilizando la siguiente estructura:
struct Templeado
{
           char nombre[20];
           char apellidos[20];
           char departamento[20];
           float sueldo;
};

#include <iostream>
#include <fstream>
using namespace std;
struct Templeado
{
    char nombre[20];
    char apellidos[20];
    char departamento[20];
    float sueldo;
};
int main()
{
    Templeado registro;
    int tamanyo = sizeof(Templeado); // Tamaño de un registro
    int conta = 0;
    ofstream out;
    ifstream in;
    out.open("sueldos2.dat", ios::binary);
    if(out.fail())
    {
       cout << "Error al crear el fichero sueldos2.dat" << endl;
       system("pause");
       exit(1);
    }
    in.open("empleados.dat", ios::binary);
    if(in.fail())
    {
       cout << "Error al abrir el fichero empleados.dat" << endl;
       system("pause");
       exit(1);
    }
    // Lectura del primer registro del fichero
    in.read((char *) &registro, tamanyo);
    while(!in.eof()) //mientras no se llegue al final del fichero
    {
         if(registro.sueldo>2000)
         {
            out.write((char *) &registro, tamanyo);
         }
         in.read((char *) &registro, tamanyo); //lectura del siguiente registro
    }
    in.clear();
    in.close();
    out.close();
    //Mostrar los registros del fichero sueldos2.dat
    in.open("sueldos2.dat", ios::binary);
    if(in.fail())
    {
       cout << "Error al abrir el fichero sueldos2.dat" << endl;
       system("pause");
       exit(1);
    }
    in.read((char *) &registro, tamanyo);
    while(!in.eof())
    {
            cout << "\nEMPLEADO: " << ++conta << endl;
            cout << "Nombre: " << registro.nombre << endl;
            cout << "Apellidos: " << registro.apellidos << endl;
            cout << "Departamento: " << registro.departamento << endl;
            cout << "Sueldo: " << registro.sueldo << endl;
            in.read((char *) &registro, tamanyo);
    }
    in.close();
    system("pause");
}

No hay comentarios:

Publicar un comentario