ファイルからの数値の読み取りと合計

C++C++Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、ファイルから数値を読み取り、それを逐行加算して結果を別のファイルに出力する方法を学びます。このチュートリアルの手順に従うことで、以下のことができる C++ プログラムを作成する方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/ControlFlowGroup(["Control Flow"]) cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/StandardLibraryGroup(["Standard Library"]) cpp/BasicsGroup -.-> cpp/strings("Strings") cpp/ControlFlowGroup -.-> cpp/while_loop("While Loop") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/IOandFileHandlingGroup -.-> cpp/user_input("User Input") cpp/IOandFileHandlingGroup -.-> cpp/files("Files") cpp/StandardLibraryGroup -.-> cpp/string_manipulation("String Manipulation") cpp/StandardLibraryGroup -.-> cpp/standard_containers("Standard Containers") subgraph Lab Skills cpp/strings -.-> lab-96163{{"ファイルからの数値の読み取りと合計"}} cpp/while_loop -.-> lab-96163{{"ファイルからの数値の読み取りと合計"}} cpp/output -.-> lab-96163{{"ファイルからの数値の読み取りと合計"}} cpp/user_input -.-> lab-96163{{"ファイルからの数値の読み取りと合計"}} cpp/files -.-> lab-96163{{"ファイルからの数値の読み取りと合計"}} cpp/string_manipulation -.-> lab-96163{{"ファイルからの数値の読み取りと合計"}} cpp/standard_containers -.-> lab-96163{{"ファイルからの数値の読み取りと合計"}} end

新しい C++ ファイルを作成する

~/project ディレクトリに file_sum.cpp という名前の新しいファイルを作成します。

touch ~/project/file_sum.cpp

必要なライブラリをインクルードする

C++ でファイルを扱うには、プログラムに <iostream><fstream> のライブラリをインクルードする必要があります。file_sum.cpp ファイルに以下のコードを追加します。

#include <iostream>
#include <fstream>

using namespace std;

ユーザにファイル名を入力させる

ユーザにファイル名を入力させます。file_sum.cpp ファイルに以下のコードを追加します。

int main()
{
    char fileName[50];
    cout << "Enter file name: ";
    cin.getline(fileName, 50);
    ifstream inFile(fileName);
    ofstream outFile("sum.txt");
    string line;
}

ここでは、ユーザが入力するファイル名を保持するための char 配列 fileName を宣言しています。その後、ユーザにファイル名を入力させ、fileName 配列に格納します。最後に、入力ファイル inFile を開くための ifstream オブジェクトと、出力ファイル outFile を作成するための ofstream オブジェクトを作成します。また、入力ファイルの各行を格納するための line 文字列も宣言しています。

ファイルを読み取り、数値を合計する

次に、ファイルを読み取り、各行の数値を合計するコードを書きます。ファイルの各行に対して、stringstream オブジェクトを使って数値を読み取り、合計して出力ファイルに書き込みます。file_sum.cpp ファイルに以下のコードを追加します。

while (getline(inFile, line))
{
    int sum = 0;
    stringstream ss(line);
    int num;
    while (ss >> num)
    {
        sum += num;
    }
    outFile << sum << endl;
}

ここでは、while ループを使って入力ファイルの各行を読み取り、その行を line 文字列に格納します。その後、sum 変数を 0 で初期化し、各行の内容を保持する stringstream オブジェクト ss を作成します。そして、stringstream から各数値を num に抽出し、各数値で sum 変数を増やします。行のすべての数値が処理された後、sum を出力ファイル outFile に書き込みます。

ファイルを閉じ、ユーザに通知する

最後に、入力ファイルと出力ファイルを閉じ、ファイルが処理されたことをユーザに通知する必要があります。file_sum.cpp ファイルに以下のコードを追加します。

inFile.close();
outFile.close();
cout << "File processed successfully." << endl;
return 0;

コードをコンパイルして実行する

以下のコマンドを使って file_sum.cpp コードをコンパイルします。

g++ file_sum.cpp -o file_sum

ターミナルで以下のコマンドでコードを実行します。

./file_sum

処理したいファイル名の入力を求められます。名前を入力してエンターキーを押します。プログラムはファイルを読み取り、行ごとに数値を合計し、結果を sum.txt という新しいファイルに書き込みます。

完全なコード

以下は file_sum.cpp ファイルの完全なコードです。

#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
    char fileName[50];
    cout << "Enter file name: ";
    cin.getline(fileName, 50);
    ifstream inFile(fileName);
    if (!inFile)
    {
        cerr << "Unable to open file" << endl;
        return -1;
    }
    ofstream outFile("sum.txt");
    string line;

    while (getline(inFile, line))
    {
        int sum = 0;
        stringstream ss(line);
        int num;
        while (ss >> num)
        {
            sum += num;
        }
        outFile << sum << endl;
    }

    inFile.close();
    outFile.close();
    cout << "File processed successfully." << endl;
    return 0;
}

まとめ

この実験では、C++ の標準ライブラリ <iostream><fstream> および stringstream クラスを使って、ファイルを読み取り、その数値を行ごとに合計し、結果を別のファイルに書き込む方法を学びました。これで、あなたはファイルを扱い、C++ プログラムで多くの基本的なファイル操作を行うことができるようになりました。