C++でテキストファイルを読み込んで分割して出力する

こんてんつ

.txtファイルを読み込んで、規則に従って分割して出力する。今回は下記の様な野球選手の名簿を、チーム毎に分割して新たなテキストファイルを複数作成する。

読み込むテキストファイル

# inputTxtFile.txt

Team1 : 巨人
菅野智之(31、投手)
坂本勇人(31、内野)

Team2 : 広島
鈴木誠也(26、外野)
菊池涼介(30、内野)

Team3 : ヤクルト
山田哲人(28、内野)
青木宣親(38、外野)
村上宗隆(21、内野)

Team4 : ソフトバンク
柳田悠岐(32、外野)
森 唯斗(28、投手)
松田宣浩(37、内野)
千賀滉大(27、投手)

Team5 : 楽天
田中将大(32、投手)

コード

Teamという文字列を見つけたら分割するという作戦にした。

#include <iostream>
#include<fstream>
#include<string>

using namespace std;

int main(){
    
    fstream inputFile;
    string inputLine;

    fstream outputFile;
    string outputFileName;

    int teamCount = 1;

    inputFile.open("inputTxtFile.txt", ios::in); //read
    if (inputFile.is_open()) {

        while (getline(inputFile, inputLine)) {

            // Teamの文字列が見つかったら.txtを作成する部分
            if (inputLine.find("Team") != string::npos) {
 
                outputFileName = "Team" + to_string(teamCount) + ".txt";
                outputFile.open(outputFileName, ios::out); //create
                outputFile.close();

                cout << "I'll create Team" << teamCount << ".txt" << endl;

                getline(inputFile, inputLine); //わざとlineを1行進める
                teamCount++;
            }
            else {}

            // 上で作成された.txtに対して、inputLineをどんどんappendしていく
            outputFile.open(outputFileName, ios::app); //append
            if (outputFile.is_open()) {
                outputFile << inputLine << endl;
                outputFile.close();
            }

        } // ココマデ while (getline(inputFile, inputLine))

        inputFile.close();
    }

    cout << "finished" << endl;
    
    system("pause>0");
    remove("0");
}

出力

ファイルが複数できて、それぞれに分割された結果が入っている。

f:id:norunblog:20210904214713p:plain

関連記事

contents-open.hatenablog.com

contents-open.hatenablog.com