C++で任意行数のテキストデータ読み込み
- 作者: 高橋麻奈
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/08/31
- メディア: 単行本
- 購入: 1人 クリック: 1回
- この商品を含むブログ (5件) を見る
はじめに
テキストファイルに記述された任意の行数の情報をプログラム上で読み取る必要があったので、その際のコードをメモしておきます。VisualStudio2015で動作確認済みです。
特筆すべきことはなく、他にテキスト読み込みのコードを載せている方々と異なるのは、テキスト情報の行数が変わった場合に対応できるよう、格納する型をstd::vector<std::string>としてあるくらいかと思います。
任意行数のテキスト読み込み
サンプルコード
#include <fstream> #include <iostream> #include <string> #include <vector> using namespace std; int getStrFromText(string filename, vector<string> &vstr) { ifstream ifs(filename); if (!ifs) { cout << "error :>> failed to open the text file." << endl; return 1; } string tmp; while (getline(ifs, tmp)) vstr.push_back(tmp); return 0; } int main() { vector<string> vstr; getStrFromText("test.txt", vstr); for(int i=0; i<vstr.size(); i++) cout << vstr[i] << endl; return 0; }
サンプル出力
Hello world!
123456
1707/4/15
コメントアウト付きテキストの読み込み
コメントアウト"//"された文字列を含むテキストファイルを読み込む際に、コメントアウト部分は読み込まないようにしたいときがあったので追記します。また、日本のWindowsでの環境の場合パスの区切りが"¥"となると思いますが、それを"/"に変更したいときに使える置換関数も追記してあります。この文字列置換関数は複数文字の置換も可能なので、他の用途にも利用できます。
#include <fstream> #include <iostream> #include <string> #include <vector> using namespace std; // 文字列の置換 int strReplace(string &str, string from, string to) { int n = 0; string::size_type pos = 0; while (pos = str.find(from, pos), pos != string::npos) { str.replace(pos, to.length(), to); pos += to.length(); n++; } return n; // 置換回数を返す } // テキスト読込み int getStrFromText(string filename, vector<string> &vstr) { ifstream ifs(filename); if (!ifs) { cout << "error :>> failed to open the text file." << endl; return 1; } string tmp; while (getline(ifs, tmp)) { if ((tmp[0] == '/' && tmp[1] == '/') || tmp.empty()) continue; else { strReplace(tmp, "\\", "/"); vstr.push_back(tmp); } } return 0; } int main() { vector<string> vstr; getStrFromText("test.txt", vstr); for(int i=0; i<vstr.size(); i++) cout << vstr[i] << endl; return 0; }
最後に
最後に筆者がC++勉強したてのときにお世話になった参考書を紹介させていただきます。この本は初心者にもやさしく、ほんとにわかりやすいのでおすすめの一冊です。
- 作者: 高橋麻奈
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/08/31
- メディア: 単行本
- 購入: 1人 クリック: 1回
- この商品を含むブログ (5件) を見る