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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- シンプルな電卓CLIの構築
- CSVファイルの読み書き
- 数当てゲーム
- 単語頻度カウンター