ファイル

ファイルの読み込み

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
// #...