C言語でファイルからデータを読み込み、表形式で表示するプログラムの作成方法
問題
C言語を使って、ファイルに保存されている一連のデータ項目を読み取り、それをコンソール上に列(表)形式で表示するには、どのようにプログラムを書けばよいのでしょうか。
解決策
まずファイルを書き込みモードで開き、一連の情報を書き込んだ後にファイルを閉じます。その後、再度同じファイルを読み込みモードで開き、データをコンソール上に列形式で表示します。
ファイルを書き込みモードで開く
FILE *fp;
fp = fopen("sample.txt", "w");
- 指定したファイルが存在しない場合は、新しいファイルが作成されます。
- ファイルがすでに存在する場合は、以前の内容は消去され、新しく書き込まれた内容だけが保存されます。
ファイルを読み込みモードで開く
FILE *fp;
fp = fopen("sample.txt", "r");
- 指定したファイルが存在しない場合、fopen関数はNULLを返します。
- ファイルが存在する場合は、正常にデータを読み込むことができます。
読み込んだデータをコンソール上に表形式で表示するためのロジックは以下のとおりです。カンマを検出するとタブ文字に置き換えて出力することで、各項目が整然とした列に並ぶようにしています。
while ((ch = getc(fp)) != EOF) {
if (ch == ',')
printf("\t\t");
else
printf("%c", ch);
}
プログラム
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main() {
char ch;
FILE *fp;
/* ファイルを書き込みモードで開く */
fp = fopen("std1.txt", "w");
printf("enter the text. press cntrl Z:\n");
/* 標準入力からEOFまで読み取り、ファイルへ書き込む */
while ((ch = getchar()) != EOF) {
putc(ch, fp);
}
fclose(fp);
/* ファイルを読み込みモードで開き直す */
fp = fopen("std1.txt", "r");
printf("text on the file:\n");
/* ファイルの内容を読み取り、カンマをタブに置き換えて表示 */
while ((ch = getc(fp)) != EOF) {
if (ch == ',')
printf("\t\t");
else
printf("%c", ch);
}
fclose(fp);
return 0;
}
実行結果
ユーザーが「名前, 項目, 価格」のようなカンマ区切りのデータを入力し、Ctrl + Z(Windowsの場合)でEOFを送信すると、ファイルに保存された内容が整形されて表示されます。
enter the text. press cntrl Z: Name,Item,Price Bhanu,1,23.4 Priya,2,45.6 ^Z text on the file: Name Item Price Bhanu 1 23.4 Priya 2 45.6
プログラムのポイント
- fopen関数:第1引数にファイル名、第2引数にモード("w"は書き込み、"r"は読み込み)を指定してファイルを開きます。
- getc / putc関数:それぞれファイルから1文字ずつ読み取る・書き込むための標準ライブラリ関数です。
- EOF判定:whileループ内でEOF(End Of File)に達するまで処理を繰り返すことで、ファイル全体を扱えます。
- fclose関数:使用後は必ずファイルを閉じてリソースを解放することが重要です。
-
JavaでCSVファイルを読み込む方法|BufferedReaderによる基本的なデータ読み取り手順
CSVとは「Comma Separated Values(カンマ区切り値)」の略で、テキスト形式のデータファイルの一種です。CSVファイルでは、1行ごとに複数の項目がカンマ(,)で区切られて記録されており、拡張子は「.csv」として保存されます。表形式のデータを扱う際に広く利用されている、シンプルで汎用性の高いフォーマットです。 JavaでCSVファイルを読み込む仕組み JavaでCSVファイルを読み込むには、BufferedReaderクラスのreadLine()メソッドを使用するのが基本的な方法です。このメソッドを使うと、ファイルの内容を1行ずつ順番に読み取ることができます。 読み取った各
-
Javaでプロパティファイルからデータを読み取る方法を解説
JavaのPropertiesクラスは、Hashtableクラスのサブクラスであり、永続化可能なプロパティの集合(プロパティセット)を表します。Propertiesオブジェクトはストリームへ保存したり、ストリームから読み込んだりすることができます。また、プロパティリスト内の各キーとそれに対応する値は、どちらも文字列型として扱われます。Javaでは、Propertiesファイルを使うことでアプリケーションの設定情報を外部化し、キーと値(key-value)のペアとして管理できます。Propertiesクラスが提供するload()メソッドを使用すると、.propertiesファイルに記述されたキー