2011年12月7日水曜日

( Qt C++ )テキストデータの読み書き


ブログのタイトル変えようかなと思っています。私のメモ帳っていうブログタイトル結構多いんだよね。
自分のブログだと思って見たら「第一子出産!…」とか書かれてて、えっ?何が?と思ったら違うブログだったりして気持ち悪いです。
というわけで近いうちタイトル変えます。たぶん180度変えます。

はい今日はテキストデータの読み書きをやっていきます。バイナリ扱うより断然ラクです。
使うQTextStreamは優れもので改行の違い(winの\r\n, Mac \nなど)を自動で処理してくれます。
また、Unicodeなどのすべてのエンコーディングを行えます。
データの最小単位としてQCharを使われます。

それではまずは書き込みの方のコードを、

( C++ GUI Programming with Qt4 280ページより)

QFile file("sf-book.txt");

if (!file.open(QIODevice::WriteOnly))//書込みのみでオープンできたかチェック
{
    return;
}

QTextStream out(&file);
out << "Thomas:" << 334 << endl;//"Thomas:334/n"と書込み

簡単ですね。読み込みの方は下記のようになります。

QString str;
QFile file("sf-book.txt");

if (!file.open(QIODevice::ReadOnly))//読込のみでオープンできたかチェック
{
    return;
}

QTextStream in(&file);
in >> str;//"Thomas:334/n"を読込む


はい、これも簡単ですね。ただ、この読込には問題があります。"thomas  M.  ..."などと空白があると読込の際strにはthomasまでしか入りません。つまり文が区切られてしまうということです。このため一行読込や全文読込。一文字読込などの処理が必要になってきます。これについては入門書にもサンプルが載っているので順次ブログに投稿してきます。

以上です。次回はテキストデータの1行ごとの読み込みです。