C言語

【C言語】第7章第6回:CSVファイルを扱う方法

CSVファイルは、多くのデータを保存・交換する際に使用されるフォーマットです。本記事では、C言語を使ったCSVファイルの読み書き方法を学びます。

0. 記事の概要

この記事を読むメリット

  • データ操作スキルの向上:CSVファイルの基本的な操作方法を習得できます。
  • 応用力の習得:データの保存、読み取り、分析に役立つスキルを習得できます。
  • 実践的な知識:プロジェクトでCSVデータを扱えるようになります。

この記事で学べること

  • CSVファイルの基本構造と操作
  • C言語でCSVファイルを読み書きする方法
  • エラー処理の実践例

活用のイメージ

CSVファイルを使用して、顧客データや売上データを管理したり、外部システムとのデータ連携を行ったりする場面で役立つスキルを学びます。

1. CSVファイルの基礎

1.1 CSVファイルとは?

CSV(Comma Separated Values)ファイルは、カンマで区切られたデータを保存する形式です。以下はCSVファイルの一例です。

Name,Age,Grade
Alice,20,A
Bob,22,B
Charlie,21,C
        

1.2 CSVファイルの用途

  • データの保存・交換(例:顧客情報、売上データ)
  • スプレッドシートやデータベースとの連携
  • データ分析やレポート作成

1.3 CSVファイルの基本構造

CSVファイルは以下のような特徴を持ちます。

  • データがカンマで区切られている
  • 各行が1つのレコードを表す
  • 最初の行がヘッダーとして使われることが多い

2. CSVファイルの読み書き

2.1 CSVファイルにデータを書き込む

#include <stdio.h>

int main() {
    FILE *file = fopen("data.csv", "w"); // 書き込みモードでファイルを開く
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    // ヘッダーを書き込む
    fprintf(file, "Name,Age,Grade\n");

    // データを書き込む
    fprintf(file, "Alice,20,A\n");
    fprintf(file, "Bob,22,B\n");
    fprintf(file, "Charlie,21,C\n");

    fclose(file); // ファイルを閉じる
    printf("CSV file written successfully.\n");
    return 0;
}
動作解説
  1. ファイルのオープン:fopen()で書き込みモードでファイルを開きます。
  2. データの書き込み:fprintf()を使ってヘッダーとデータを書き込みます。
  3. ファイルのクローズ:fclose()でファイルを閉じます。

2.2 CSVファイルからデータを読み取る

#include <stdio.h>

int main() {
    FILE *file = fopen("data.csv", "r"); // 読み取りモードでファイルを開く
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    char line[100];

    // ファイルの内容を1行ずつ読み取る
    while (fgets(line, sizeof(line), file) != NULL) {
        printf("%s", line); // 読み取った行を出力
    }

    fclose(file); // ファイルを閉じる
    return 0;
}
動作解説
  1. ファイルのオープン:fopen()で読み取りモードでファイルを開きます。
  2. データの読み取り:fgets()を使って1行ずつデータを読み取ります。
  3. データの出力:読み取ったデータをprintf()で表示します。
  4. ファイルのクローズ:fclose()でファイルを閉じます。

2.3 CSVデータの解析

#include <stdio.h>
#include <string.h>

int main() {
    FILE *file = fopen("data.csv", "r");
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    char line[100];

    // ヘッダーをスキップ
    fgets(line, sizeof(line), file);

    // データ行を解析
    while (fgets(line, sizeof(line), file) != NULL) {
        char *name = strtok(line, ",");
        char *age = strtok(NULL, ",");
        char *grade = strtok(NULL, ",");

        printf("Name: %s, Age: %s, Grade: %s", name, age, grade);
    }

    fclose(file);
    return 0;
}
ポイント
  • strtok()を使用してカンマで区切られたデータを解析
  • ヘッダー行をスキップする処理
  • 各データフィールドを分離して出力

3. 練習問題

以下の課題に挑戦して、CSVファイル操作のスキルを向上させましょう。

  1. CSVファイルにデータを追加するプログラムを作成してください。
  2. CSVファイルを読み取り、特定の名前に一致する行を検索して表示するプログラムを作成してください。
  3. CSVファイルを読み取り、データの合計や平均を計算するプログラムを作成してください。

4. 練習問題の解答と解説

問1の解答

#include <stdio.h>

int main() {
    FILE *file = fopen("data.csv", "a"); // 追記モードでファイルを開く
    if (file == NULL) {
        printf("Error opening file.\n");
        return 1;
    }

    // データを追加
    fprintf(file, "David,23,B\n");

    fclose(file); // ファイルを閉じる
    printf("Data appended to CSV file successfully.\n");
    return 0;
}

5. まとめ

CSVファイルは、データ管理における強力なツールです。本記事を通じて、C言語でのCSVファイル操作の基礎を学びました。次回は、CSVファイルをさらに応用する方法を学びます。