この記事では、C言語を使ってファイルからデータを読み込む方法について学びます。
特に、1行目をスキップして2行目からデータを取得する方法や、CSVファイルの読み込み、特定の条件に基づいて行を選んで表示する方法を紹介します。
初心者の方でもわかりやすく解説しますので、ぜひ最後まで読んでみてください。
2行目からの読み込み
C言語でファイルを扱う際、特定の行からデータを読み込むことが求められる場合があります。
特に、1行目にはヘッダー情報が含まれているCSVファイルなどでは、2行目からデータを読み込む必要があります。
ここでは、1行目をスキップして2行目からデータを読み込む方法について解説します。
1行目をスキップする方法
ファイルを開いてデータを読み込む際、最初の行をスキップするためには、まずファイルを開き、1行目を読み込んで捨てる必要があります。
以下はその基本的な手順を示すサンプルコードです。
#include <stdio.h>
int main() {
FILE *file;
char buffer[256];
// ファイルを開く
file = fopen("data.txt", "r");
if (file == NULL) {
printf("ファイルを開けませんでした。\n");
return 1;
}
// 1行目を読み込んでスキップ
fgets(buffer, sizeof(buffer), file);
// 2行目を読み込む
if (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("2行目の内容: %s", buffer);
}
// ファイルを閉じる
fclose(file);
return 0;
}
このコードでは、まずファイルを開き、fgets関数
を使って1行目を読み込みます。
この時、読み込んだ内容はbuffer
に格納されますが、特に使用することはありません。
その後、再度fgets
を呼び出して2行目を読み込み、内容を表示します。
2行目以降のデータ処理
2行目以降のデータを処理するためには、ループを使ってファイルの終わりまで読み続けることが一般的です。
以下のサンプルコードでは、2行目以降の全ての行を読み込み、各行の内容を表示します。
#include <stdio.h>
int main() {
FILE *file;
char buffer[256];
// ファイルを開く
file = fopen("data.txt", "r");
if (file == NULL) {
printf("ファイルを開けませんでした。\n");
return 1;
}
// 1行目をスキップ
fgets(buffer, sizeof(buffer), file);
// 2行目以降を読み込む
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("読み込んだ行: %s", buffer);
}
// ファイルを閉じる
fclose(file);
return 0;
}
このコードでは、while
ループを使用してファイルの各行を読み込み、内容を表示しています。
fgets
がNULLを返すまで、つまりファイルの終わりに達するまでループが続きます。
これにより、2行目以降の全てのデータを効率的に処理することができます。
このように、C言語を使ってファイルの特定の行からデータを読み込む方法を理解することで、さまざまなデータ処理のニーズに応じたプログラムを作成することが可能になります。
応用例
CSVファイルの読み込み
CSV(Comma-Separated Values)ファイルは、データをカンマで区切って保存する形式で、データのやり取りに広く使われています。
C言語でCSVファイルを読み込む際も、特定の行からデータを取得することができます。
ここでは、2行目からCSVファイルを読み込む方法を紹介します。
以下のサンプルコードでは、CSVファイルの1行目をスキップし、2行目以降のデータを読み込んで表示します。
#include <stdio.h>
int main() {
FILE *file;
char line[256];
// CSVファイルを開く
file = fopen("data.csv", "r");
if (file == NULL) {
perror("ファイルを開けませんでした");
return 1;
}
// 1行目をスキップ
fgets(line, sizeof(line), file);
// 2行目以降を読み込む
while (fgets(line, sizeof(line), file)) {
// 読み込んだ行を表示
printf("%s", line);
}
// ファイルを閉じる
fclose(file);
return 0;
}
このコードでは、まずファイルを開き、fgets関数
を使って1行目を読み飛ばします。
その後、while
ループを使って2行目以降のデータを読み込み、各行を表示します。
CSVファイルの内容が以下のような場合を考えます。
名前,年齢,職業
田中,30,エンジニア
佐藤,25,デザイナー
鈴木,28,マネージャー
このプログラムを実行すると、次のような出力が得られます。
田中,30,エンジニア
佐藤,25,デザイナー
鈴木,28,マネージャー
特定の条件に基づく行の読み込み
特定の条件に基づいて行を読み込むことも可能です。
たとえば、年齢が30歳以上の人だけを表示するプログラムを作成してみましょう。
以下のサンプルコードでは、2行目以降のデータを読み込み、年齢が30歳以上の行だけを表示します。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *file;
char line[256];
char *token;
// CSVファイルを開く
file = fopen("data.csv", "r");
if (file == NULL) {
perror("ファイルを開けませんでした");
return 1;
}
// 1行目をスキップ
fgets(line, sizeof(line), file);
// 2行目以降を読み込む
while (fgets(line, sizeof(line), file)) {
// カンマで区切ってトークンを取得
token = strtok(line, ",");
int age = 0;
// 年齢を取得
for (int i = 0; i < 2; i++) {
token = strtok(NULL, ",");
if (i == 1) {
age = atoi(token); // 年齢を整数に変換
}
}
// 年齢が30歳以上の場合に表示
if (age >= 30) {
printf("%s", line);
}
}
// ファイルを閉じる
fclose(file);
return 0;
}
このプログラムでは、strtok関数
を使ってカンマで区切られた各トークンを取得し、年齢を整数に変換しています。
年齢が30歳以上の場合にのみ、その行を表示します。
CSVファイルの内容が同じであれば、出力は次のようになります。
田中,30,エンジニア
このように、C言語を使ってファイルを読み込み、特定の条件に基づいてデータを処理することができます。
これにより、さまざまなデータ分析や処理が可能になります。