C言語でCSVファイルを読み込む方法をわかりやすく解説

CSVファイルは、データを表形式で保存するための一般的な方法です。
C言語を使用してCSVファイルを読み込むことは、プログラミング初心者にとっても非常に役立ちます。
この記事では、CSVファイルの基本的な構造や、C言語でCSVファイルを読み込む方法について詳しく解説します。また、サンプルコードも含めて紹介するので、ぜひ参考にしてください。
CSVファイルとは
CSVファイルとは、Comma Separated Values(カンマ区切り値)の略称で、テキストファイル形式の一種です。データを表形式で扱う際によく使われます。
CSVファイルは、各行がレコード(1つのデータ)を表し、各列がそのレコード内のフィールド(データの要素)を表します。カンマ以外にもタブやセミコロンなどで区切ることもあります。
例えば、以下のようなCSVファイルがあった場合、
名前,年齢,性別
山田太郎,25,男性
田中花子,30,女性
1行目がヘッダー(列の見出し)、2行目以降が実際のデータです。この場合、「山田太郎」さんは25歳で男性、「田中花子」さんは30歳で女性という情報が含まれています。
CSVファイルを読み込む方法
CSVファイルを読み込む方法について、以下の手順で解説します。
ファイルを開く
まずは、CSVファイルを開きます。C言語では、fopen()
関数を使ってファイルを開きます。以下は、sample.csv
という名前のCSVファイルを読み込む例です。
FILE *fp;
char *filename = "sample.csv";
fp = fopen(filename, "r");
if (fp == NULL) {
printf("ファイルを開けませんでした: %s\n", filename);
return 1;
}
fopen()
関数の第1引数には、ファイル名を指定します。第2引数には、ファイルモードを指定します。ここでは、読み込みモードである「r」を指定しています。
ファイルから1行ずつ読み込む
次に、fgets()
関数を使ってCSVファイルから1行ずつデータを読み込みます。以下は、fgets()
関数で1行分のデータを取得する例です。
char line[1024];
while (fgets(line, 1024, fp)) {
// 読み込んだデータの処理
}
fgets()
関数の第1引数には、読み込んだデータが格納される文字列変数を指定します。第2引数には、最大文字列長(バッファサイズ)を指定します。第3引数には、ファイルポインター(先程開いたCSVファイル)を指定します。
読み込んだ行をカンマで分割する
次に、strtok()
関数や自作のカンマ区切り処理関数などで、読み込んだ行データ(文字列)をカンマで分割します。以下は、「,」区切りで分割する例です。
char *token;
token = strtok(line, ",");
while (token != NULL) {
// 分割したデータの処理
token = strtok(NULL, ",");
}
strtok()
関数の第1引数には、対象となる文字列変数(今回はline[]
)と区切り文字(今回は,
)が入ります。戻り値として区切られたトークンが返されます。また次回呼び出す際にNULLポインターが渡されることで続きから再開されます。
分割したデータを処理する
最後に分割した各要素ごとに必要な処理(例えば配列へ格納する等) を実施しましょう。
ここまでの処理を全て実装した完成コードがこちらです。
#include <stdio.h>
int main() {
FILE *fp;
char *filename = "sample.csv";
fp = fopen(filename, "r");
if (fp == NULL) {
printf("ファイルを開けませんでした: %s\n", filename);
return 1;
}
char line[1024];
while (fgets(line, 1024, fp)) {
char *token;
token = strtok(line, ",");
while (token != NULL) {
// 分割したデータの処理
printf("%s\t",token);
token = strtok(NULL, ",");
}
printf("\n");
}
return 0;
}
名前 年齢 性別
山田太郎 25 男性
田中花子 30 女性
以上がC言語でCSVファイルからデータを読み込む基本的な手順です。
CSVファイルを読み込む際の注意点
CSVファイルを読み込む際には、いくつかの注意点があります。ここでは、その注意点について解説します。
ファイルの存在チェック
まず、CSVファイルを読み込む前に、ファイルが存在するかどうかを確認する必要があります。
fp = fopen(filename, "r");
//fpがNULLだと読み込みに失敗している
if (fp == NULL) {
printf("ファイルを開けませんでした: %s\n", filename);
return 1;
}
ファイルが存在しない場合は、プログラムがエラーを出力して終了してしまいます。そのため、事前にファイルの存在チェックを行うようにしましょう。
ファイルのオープンモード
次に、ファイルを開く際には適切なオープンモードを指定する必要があります。CSVファイルを読み込む場合は、r
を指定して読み込みを有効化する必要があります。また、テキストモードで開くことも忘れずに指定してください。
FILE *fp;
fp = fopen("sample.csv", "r");
ファイルのクローズ
CSVファイルを読み込んだら、必ずファイルをクローズするようにしましょう。これはメモリリークを防止するためです。
fclose(fp);