0Pricing
C++ Academy · レッスン

CSVファイルの読み書き

CSVファイルを1行ずつ解析し、結果をディスクに書き戻します。

「CSVファイルの読み書き」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

CSV とは何か

CSV(Comma-Separated Values)は、プレーンテキスト形式の表形式データです。各行が1つの行に相当し、コンマで列を区切ります。単純ですが、エッジケースが多くあります。

必要なヘッダー

ファイルには fstream、解析には sstream を使用します。

#include <fstream>
#include <sstream>
#include <string>
#include <vector>

読み取り用にファイルを開く

ファイルパスを指定して std::ifstream を構築します。正常に開けたことを確認してください。

std::ifstream file("data.csv");
if (!file) {
    std::cerr << "Cannot open file\n";
    return 1;
}

1行ずつ読み取る

std::getline を使って行を順に処理します。

std::string line;
while (std::getline(file, line)) {
    process(line);
}

行を分割する

stringstream と区切り文字を指定した getline を使って、各行をフィールドに分割します。

std::vector<std::string> split(const std::string& line) {
    std::vector<std::string> fields;
    std::stringstream ss(line);
    std::string field;
    while (std::getline(ss, field, ',')) {
        fields.push_back(field);
    }
    return fields;
}

ヘッダーをスキップする

列名を含む場合は、最初の行を読み取って破棄します。

std::string header;
std::getline(file, header);   // discard

型付きフィールドを解析する

std::stoi や std::stod を使って、文字列フィールドを型付きの値に変換します。

auto fields = split(line);
int id = std::stoi(fields[0]);
double price = std::stod(fields[2]);

CSV に書き込む

書き込みには std::ofstream を使用します。<< で値をストリームに送り、コンマと改行を追加します。

std::ofstream out("results.csv");
out << "name,score\n";
out << "Ada,95\n";
out << "Bob,82\n";

コンマを含むフィールドを引用符で囲む

フィールドにコンマが含まれる場合は、二重引用符で囲みます。フィールド内に引用符を含めるには、引用符を2つ重ねます。

std::string escape(const std::string& s) {
    if (s.find_first_of(",\"\n") == std::string::npos) return s;
    std::string r = "\"";
    for (char c : s) {
        if (c == '"') r += '"';
        r += c;
    }
    return r + "\"";
}

フィールド内の改行を処理する

引用符で囲まれたフィールドは、複数の物理行にまたがることがあります。堅牢な CSV リーダーでは、getline の呼び出しをまたいで引用符の状態を追跡します。単純なケースでは、複数行にまたがらないフィールドに限定してください。

ファイルを閉じる

ファイルストリームは、破棄されると自動的に閉じられます(RAII)。明示的に閉じるには file.close() を使用します。これはストリームを再利用したい場合にだけ必要です。

ライブラリを使うタイミング

複雑な CSV ファイル(引用符付きコンマ、複数行の値、エンコーディング)には、rapidcsv や csv-parser のようなライブラリを使用します。独自実装は、単純で管理された形式の場合だけにしてください。

クイックチェック

標準ライブラリだけを使って、行をコンマで分割するにはどのような方法を使いますか。

まとめ

std::ifstream と std::getline で CSV を読み取り、stringstream とコンマ区切り文字で行を分割し、std::stoi/stod で型付きフィールドを解析します。複雑な CSV には実績のあるライブラリを使用してください。

よくある質問

「CSVファイルの読み書き」レッスンは無料ですか?

はい。「CSVファイルの読み書き」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「CSVファイルの読み書き」で何を学びますか?

CSVファイルを1行ずつ解析し、結果をディスクに書き戻します。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「CSVファイルの読み書き」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. シンプルな電卓CLIの構築
  2. CSVファイルの読み書き
  3. 数当てゲーム
  4. 単語頻度カウンター
← C++ Academyに戻る