'quizzes.dat'
メモ帳で開くと、次のようなファイルがあります。
"Bart Simpson K A F Ralph Wiggum # < , Lisa Simpson d b [ Martin Prince c b c Milhouse Van Houten P W O "
すべて1行で。
fstream
このバイナリファイルを取得し、関数を使用して読み取り可能なテキストファイルを出力したいと思いますread/ write
。
私がこれまでに持っているコードはかなり単純です:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool openInFile (ifstream &, char []);
bool openOutFile (ofstream &, char []);
struct student
{
char name[25];
int exam1;
int exam2;
int exam3;
};
student bclass[5];
int main()
{
ifstream input;
openInFile (input, "quizzes.dat");
ofstream output;
openOutFile (output, "quizzes.txt");
output << "=================================================\n";
while (!input.eof())
{
for (int i = 0; i < 5; i++)
{
input.read((char*)&bclass[i], sizeof(bclass[i]));
output << bclass[i].name << ", " << bclass[i].exam1 << ", "
<< bclass[i].exam2 << ", " << bclass[i].exam3 << endl;
}
}
output << "=================================================\n";
input.close();
output.close();
return 0;
}
// Opens and checks input file
bool openInFile (ifstream &in, char filename[])
{
in.open(filename, ios::in | ios::binary);
if (in.fail())
{
cout << "ERROR: Cannot open quizzes.dat\n";
exit(0);
}
return in.fail();
}
// Opens and checks output file
bool openOutFile (ofstream &out, char filename[])
{
out.open(filename, ios::out);
if (out.fail())
{
cout << "ERROR: Cannot open quizzes.txt\n";
exit(0);
}
return out.fail();
}
まず、これはバイナリファイルを読み取るための最良の方法ですか?array
それとも、を作るのは良い考えではありませんstruct
か?バイナリファイルは、struct
25文字の名前、3つのintクイズの成績、合計5人の生徒のパターンに従っていると言われました。
最後に、テキストファイルで取得する出力は次のとおりです。
=================================================
バートシンプソン、16640、17920、1818317312
ph Wiggum、2883584、1766588416、1394631027
インプソン、1291845632、1769239137、1917853806
ince、1751935309、1702065519、1851872800
法天、0、0、0
=================================================
次のようになります。
=================================================
バートシンプソン、75、65、70
Ralpph Wiggum、35、60、44
リサシンプソン、100、98、91
マーティン・プリンス、99、98、99
ミルハウス・ヴァン・ホーテン、80、87、79
=================================================
メモ帳でdatファイルを分析すると、各名前に25個のスペースが割り当てられており、読み取り不可能な部分にはそれぞれ4個のスペースがあり、整数型の4バイトに相関すると思います。
私の質問は、そのデータを読み取り可能なテキスト形式に変換するにはどうすればよいですか。また、データが構造体とまったく同じパターンに従っているように見える場合、名前が切り捨てられるのはなぜですか。助けてください!