2018年04月17日
《その363》コンテナデータのファイル処理
コンテナデータのファイル処理
コンテナとして、下記のプログラムでは、ベクトルコンテナを使用しています。
コンテナに格納するのは、クラス Student のオブジェクトです。
プログラムは、コンテナデータを score.txtファイルに書き出した後、記憶域上のデータを、一旦 消去します。
その後、プログラムは、データをファイルから読み込みなおして、それを画面に表示します。
以下は、プログラムです。
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
class Student {
string name;
int score;
public:
Student(string s, int x)
: name(s), score(x) { }
string get_name() const{ return name; }
int get_score() const{ return score; }
};
int main() {
// ベクトルコンテナを作成します。
vector<Student>* pvec = new vector<Student> ;
// 以下のデータをベクトルコンテナに格納します。
pvec->push_back(Student("Nojima", 925));
pvec->push_back(Student("Shimano", 560));
pvec->push_back(Student("Sakagami", 810));
pvec->push_back(Student("Uesaka", 660));
pvec->push_back(Student("Kimura", 990));
pvec->push_back(Student("Muraki", 740));
ofstream fos("score.txt");
if (!fos) {
cout << "ファイルをオープンできません。";
}
else {
// データを、ファイル score.txt に書き出します。
for (vector<Student>::size_type i = 0; i < pvec->size(); i++)
fos << ' ' << (*pvec)[i].get_name()
<< ' ' << (*pvec)[i].get_score();
}
fos.close();
// ベクトルコンテナを delete して、
// 記憶域上のベクトルデータを消去します。
delete pvec;
// 新たにベクトルオブジェクト vec を作成し、
// この vec にファイルの内容
// を読み込みます。
vector<Student> vec;
ifstream fis("score.txt");
if (!fis) {
cout << "ファイルをオープンできません。";
}
else {
for (;;) {
if (fis.eof()) break;
string tmp1; int tmp2;
fis >> tmp1; fis >> tmp2;
vec.push_back(Student(tmp1, tmp2));
}
}
// コンテナ vec の内容を表示して、
// 読込みが成功していることを確認します。
for (vector<Student>::size_type i = 0; i < vec.size(); i++)
cout << right << setw(2) << i + 1 << ' '
<< setw(10) << left << vec[i].get_name()
<< vec[i].get_score() << '\n';
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7559650
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック