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);
目次