ファイルの読み込み
C++ におけるファイルの読み込みでは、C 言語と同様に fopen
関数と fclose
関数を利用することもできるが、ifstream ライブラリーの関数を利用すると便利である。次の例は、アミノ酸や塩基配列などを保存する FASTA ファイルを読み込む例である。
char[] 型の利用
ファイルを開き、1 行ずつ char* 型に読み込む場合は、あらかじめ、char 型の配列の長さをして置く必要がある。この FASTA ファイルは 1 行 80 文字となっているので、改行文字も含めて、読み込み用の char[] のサイズを 81 としている。
#include <fstream>
#include <iostream>
#include <string>
int main()
{
std::ifstream ifs("./data/1alk.fa");
int buf_size = 81;
char str[buf_size];
if (ifs.fail()) {
std::cerr << "Failed to open file." << std::endl;
return -1;
}
while (ifs.getline(str, buf_size)) {
std::cout << "#" << str << std::endl;
}
return 0;
}
// #>1ALK:A|PDBID|CHAIN|SEQUENCE
// #TPEMPVLENRAAQGNITAPGGARRLTGDQTAALRNSLSDKPAKNIILLIGDGMGDSEITAARNYAEGAGGFFKGIDALPL
// #TGQYTHYALNKKTGKPDYVTDSAASATAWSTGVKTYNGALGVDIHEKDHPTILEMAKAAGLATGNVSTAELQDATPAALV
// #...
string 型の利用
ファイルの内容を 1 行ずつ string 型に読み込む際に、1 行の長さを最初に指定する必要はない。
#include <fstream>
#include <iostream>
#include <string>
int main()
{
std::ifstream ifs("./data/1alk.fa");
std::string str;
if (ifs.fail()) {
std::cerr << "Failed to open file." << std::endl;
return -1;
}
while (getline(ifs, str)) {
std::cout << "#" << str << std::endl;
}
return 0;
}
// #>1ALK:A|PDBID|CHAIN|SEQUENCE
// #TPEMPVLENRAAQGNITAPGGARRLTGDQTAALRNSLSDKPAKNIILLIGDGMGDSEITAARNYAEGAGGFFKGIDALPL
// #TGQYTHYALNKKTGKPDYVTDSAASATAWSTGVKTYNGALGVDIHEKDHPTILEMAKAAGLATGNVSTAELQDATPAALV
// #...
ファイルの書き出し
ファイルの書き出しは ofstream ライブラリーを利用する。
#include <fstream>
#include <iostream>
#include <string>
int main()
{
std::ofstream ofs("./seq.fa");
ofs << ">seq1" << std::endl;
ofs << "ACAGTGTGACTTAGCTGTAC" << std::endl;
ofs << ">seq2" << std::endl;
ofs << "CCCGGCTTTTATGAG" << std::endl;
return 0;
}
// #>1ALK:A|PDBID|CHAIN|SEQUENCE
// #TPEMPVLENRAAQGNITAPGGARRLTGDQTAALRNSLSDKPAKNIILLIGDGMGDSEITAARNYAEGAGGFFKGIDALPL
// #TGQYTHYALNKKTGKPDYVTDSAASATAWSTGVKTYNGALGVDIHEKDHPTILEMAKAAGLATGNVSTAELQDATPAALV
// #...