どうも多浪Fランぼっち底辺大学生です。
今回は、テキストファイル(.txt)に関して作成・読み込み・出力の基本動作について確認していこうと思います。
まずは、基本的な命令を教えてくれ!!!!
と言った、疑問に応えて行きます。
- ファイルの新規作成法
- ファイルへの書き込み・出力
- ファイルの読み込み
それでは早速見て行きましょう。
テキストファイル(.txt)のみを扱います。
Contents
ファイル操作の流れ
C言語によるファイル操作は以下の3ステップに分けられます。
- ファイル処理のための初期設定
- ファイル編集をする
- 後処理
ファイル処理のための初期設定
初期設定とは、”ファイルポインタ宣言”と”処理するファイルをオープン”する作業の事です。
具体的には以下のようにコードを書きます。
ーーファイルポインタ宣言ーー
FILE *fp;
ーーファイルのオープンーー
fp=fopen(“ファイル名”, “操作モード”);
まずは上記の2項目が大事です。
こいつらをしっかり記述してやらないとファイル操作ができないので、注意してください。
ファイルを編集する
ここで、ファイルに書き込みや読み込みなどと言った作業を行います。
その際の基本的なコマンドは以下です。
- fgetc :ファイルから一文字読み込み
- fputc :ファイルへ一文字出力
- fgets :ファイルから一行読み込み
- fputs :ファイルへ一行出力
- fscanf :ファイルから書式付き読み込み
- fprintf :ファイルへ書式付き出力
詳しい使い方は後程のソースコードで確認してください。
今回は “fprintf” と “fscanf” のみを使います。
後処理
ファイルの編集を終えたら後処理が必要となります。
具体的には「fp=fopen()」関数で開いたファイルを閉じる作業の事です(‘ω’)ノ
ーー開いたファイルを閉じるーー
fclose(fp)
ファイルを開いて必要な編集を施したら最後にファイルを閉じてあげます。
このような流れでC言語でのファイル操作を行います。
実際にファイル操作をしてみよう【ソースコード付き】
それでは実際に、C言語プログラミングによるファイル操作を見て行きましょう。
ファイルを新規作成して書き込みを行う(その1)
まずは、新規のファイルを作成し書き込みを行うプログラムを紹介します。
※なお、ファイルの形式(フォーマット)はテキスト(.txt)とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include<stdio.h> #define MAXNAME 20 int main(){ int i, num; char filename[MAXNAME]; FILE *fp; printf("新規ファイル名を入力 :"); scanf("%s",filename); fp=fopen(filename, "w"); //書き出しモードでファイルを開く printf("10回整数を入力\n"); for (i=0;i<10;i++){ printf("%d回目:",i+1); scanf("%d",&num); fprintf(fp, "%d ",num); } fclose(fp); //ファイルを閉じる } |
取り合えず簡潔に書いてみました。
書き出しモードなのでfopenの引数を “w” としました。
コイツを実行してみます。

実行前が上(↑)の画像です。まだテキストファイルが作成されていなことが分かりますね。
それでは、実行してみます(コンパイルを省く)

実行しました。
すると・・・・

無事ファイルが作成されています(-ω-)/
さて、それでは中身はどうでしょう?

プログラム実行時に入力した整数値がそっくり書き込まれていますね。
ファイルを新規作成して書き込みを行う(その2)
また、少し工夫をしてファイル操作を行うことが出来ます。
例えば、宣言した構造体の中身に情報を入力し、その情報をファイルへ出力するとうい感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#define MAXNAME 20 #define NUM 3 typedef struct { char name[MAXNAME]; int id; double height; double weight; }student; int main(){ int i; student list[NUM]; char filename[MAXNAME]; FILE *fp; printf("ファイル名を入力 :"); scanf("%s",filename); fp=fopen(filename,"w"); printf("%d人分の情報を入力\n",NUM); printf("(氏名・学生番号・身長・体重)\n\n"); for (i=0;i<NUM;i++){ printf("%i人目\n",i+1); printf("氏名 :"); scanf("%s",list[i].name); printf("学生番号 :"); scanf("%d",&list[i].id); printf("身長 :"); scanf("%lf",&list[i].height); printf("体重 :"); scanf("%lf",&list[i].weight); printf("\n"); } for (i=0;i<NUM;i++){ fprintf(fp, "%8s ", list[i].name); fprintf(fp, "%d ",list[i].id); fprintf(fp, "%.2f %.2f \n",list[i].height, list[i].weight); } fclose(fp); } |
このソースコードを実行してみます。

すると・・・

コチラも思い通りにファイル出力が出来ています。
ファイルを読み込む
それでは、学生情報を書き込んだファイル(students.txt)を読み込んでみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include<stdio.h> #include<stdlib.h> #define MAXNAME 20 #define NUM 3 int main(){ int id; double height, weight; char filename[MAXNAME], name[MAXNAME]; FILE *fp; printf("読み込むファイル名を入力 :"); scanf("%s",filename); /*ファイルが存在しない場合*/ fp=fopen(filename, "r"); if (fp==NULL){ printf("ファイルを開けませんでした\n"); exit(1); } while(fscanf(fp, "%s %d %lf %lf", name, &id, &height, &weight) != EOF) { printf("%s %d %.1f %.1f\n", name, id, height, weight); } fclose(fp); } |
今度は読み込みモードを実行するわけなので、fopenの引数には “r” を渡します。
それでは実行してみます。

正しく読み込みが出来ました(-ω-)/
因みに、存在しないファイルを開こうとすると以下の様な結果になります。

参考にした書籍
参考にした書籍は【新・明解C言語 入門編】です。
「もっと知識を蓄えたい!」、「いろいろな問題を解いてみたい!!」と思った人はサンプルを覗いてみて下さい。

おわり
以上がC言語によるファイル操作の基本的な使用例でした。
テキストフォーマット以外にも画像を読み込んで編集するなど幅広く利用できると思うので、興味を持った人などは勉強を進めてみて下さい。
以上です。