Ejercicio Ficheros Binarios C++. Crear un fichero binario a partir de un fichero de texto

Se dispone de un fichero de texto alumnos.txt que contiene los datos de los alumnos de un centro de enseñanza.
Cada línea del fichero contiene los datos de un alumno, con el siguiente formato:

caracteres 01 a 20: Apellido 1
caracteres 21 a 40: Apellido 2
caracteres 41 a 60: Nombre
caracteres 61 a 70: Código del alumno

Ejemplo de contenido del fichero alumnos.txt:

1234567890123456789012345678901234567890123456789012345678901234567890

González            Salcedo             Sancho              1023655890
López               Rodríguez           Ignacio             2258962122
Martínez            Pascual             Lucas               5893143333
Fernández           Aznar               Jesús               1458963250
García              García              Ana                 8899204555

Escribe un programa C++ que lea el fichero de texto y escriba su contenido en un fichero binario alumnos.dat utilizando una estructura que contenga los datos del alumno.

#include <iostream>
#include <fstream>
using namespace std;
struct Talumno
{
    char apellido1[21];
    char apellido2[21];
    char nombre[21];
    char codigo[11];
};
int main()
{
    Talumno registro;
    int tamanyo = sizeof(Talumno);
    ifstream in;
    ofstream out;
    in.open("alumnos.txt");
    if(in.fail())
    {
       cout << "Error al abrir el fichero alumnos.txt" << endl;
       system("pause");
       exit(1);
    }
    out.open("alumnos.dat", ios::binary);
    if(out.fail())
    {
       cout << "Error al crear el fichero alumnos.dat" << endl;
       system("pause");
       exit(1);
    }
   
    in.getline(registro.apellido1,21);  //leer los 20 caracteres del primer apellido
    while(!in.eof())
    {
         in.clear(); //elimina el estado de error que produce getline
         in.getline(registro.apellido2,21);
         in.clear();
         in.getline(registro.nombre,21);
         in.clear();
         in.getline(registro.codigo,11);
         in.clear();
         out.write((char *) &registro, tamanyo); //escribir en el fichero binario                
         in.getline(registro.apellido1,21);
    }
    in.close();
    out.close();
    system("pause");
}

1 comentario:

  1. Detalle de estilo; a mi en la carrera me suelen decir que los mensajes de error van en la parte, else , un saludo.

    ResponderEliminar