OpenNH

日常のひとこま(自分用のメモとかあれこれ)

C++で任意行数のテキストデータ読み込み

やさしいC++ 第4版 (「やさしい」シリーズ)

やさしいC++ 第4版 (「やさしい」シリーズ)

はじめに

テキストファイルに記述された任意の行数の情報をプログラム上で読み取る必要があったので、その際のコードをメモしておきます。VisualStudio2015で動作確認済みです。

特筆すべきことはなく、他にテキスト読み込みのコードを載せている方々と異なるのは、テキスト情報の行数が変わった場合に対応できるよう、格納する型をstd::vector<std::string>としてあるくらいかと思います。

任意行数のテキスト読み込み

サンプル入力

"test.txt"

Hello world!
123456
1707/4/15

サンプルコード

#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++勉強したてのときにお世話になった参考書を紹介させていただきます。この本は初心者にもやさしく、ほんとにわかりやすいのでおすすめの一冊です。

やさしいC++ 第4版 (「やさしい」シリーズ)

やさしいC++ 第4版 (「やさしい」シリーズ)