現代社会において、情報は電子化されなくてはならない。電子化されると多くの媒体で公 表され、世界中の人が使える。私の講義ノートも多くの人に見てもらうために、電子化し ている。インターネットを使って、世界中、どこでも私の講義ノートを見ることができる。 本当に、その技術はすばらしいと思う。ただ、私の講義ノートの善し悪しは別の問題であ る。
読み込み先のファイルは、fgetc関数の実引数に書く。もちろん、これはopen関数により開かれたファイルのファイル記述子である。この関数の動作は、キーボードから1文字入力するgetcharに非常によく似ている。事実、ファイル記述子を「stdin」とすれば、getchar と全く同じ働きをする。stdinとはstandard inputの略で、標準入力すなわち、キーボードのことである。UNIXでは、キーボードもファイルと同じように取り扱われる。この関数は、次のように使う。fgetc 機能 ファイルから1文字入力する。 ヘッダー stdio.h 形式 int fgetc(FILE *fp) 返却値 読み込んだ文字を返す。異常時は EOF を 返す
FILE *fp; int hoge; /* 整数型の変数 */ fp=fopen("text.txt","r"); /* ファイルのオープン */ hoge=fgetc(fp); /* 1文字代入 */この関数は、後で述べる「fputc」と対の関係になっている。
あらかじめオープンされたファイルから、1行を読み込み、配列hogeに格納する。ただし、nバイト越えると読み込みは止める。この関数は、次のようにして使う。fgets 機能 ファイルから1行読み込み、配列に格納。 ヘッダー stdio.h 形式 char fgets(char *hoge, int n, FILE *fi) 返却値 入力文字をそのまま返す。ファイル終了時、あるいはエラー のときは NULL を返す。
FILE *fi; char hoge[256]; /* 文字型の配列 */ fi=fopen("rtest.txt","r"); /* ファイルのオープン */ fgets(hoge,256,fi); /* 1行代入 */ fclose(fi);読み込むバイト数を指定しているため、getsのように、許可されていないメモリー 領域の内容を書き換えるようなことはない。
この関数は次のように使う。fscanf 機能 ファイル(fi)から文字列を読み込み、hoge(配列)に格納。 ヘッダー stdio.h 形式 int fscanf(fi,"%s", hoge) 返却値 通常、入力項目を返す。異常時は EOF を返す。
FILE *fi; char hoge[256]; /* 文字型の配列 */ fi=fopen("rtest.txt","r"); /* ファイルのオープン */ fscanf(fi,"%s",hoge); /* 文字列代入 */ fclose(fi);この関数も、scanf同様に空白を入力できないという問題がある。理由も 同じである。この関数と対になっているのが、おなじみの「fprintf」 である。
この関数を使って、変数hogeに格納された文字をファイルに出力するためには、次のように記述する。fputc 機能 ファイルに1文字出力する。 ヘッダー stdio.h 形式 int fputc(int hoge, FILE *fo) 返却値 出力した文字を返す。異常時は EOF を返す
FILE *fi,*fo; int hoge; /* 整数型の変数 */ fi=fopen("rtest.txt","r"); /* 読み込み用ファイルのオープン */ fo=fopen("wtest.txt","w"); /* 書き込み用ファイルのオープン */ hoge=fgetc(fi); /* 1文字読み込み */ fputc(hoge,fo); /* 1文字書き出し */ fclose(fo); /* 読み込み用ファイルのオープン */ fclose(fi); /* 書き込み用ファイルのオープン */「fputc」でファイルに文字を書いた場合、改行の「\n」 は出力されない。実際、改行されたら、非常に困る。
この関数は、つぎのようにつかう。fputs 機能 ファイルに文字列を出力する。改行は付加しない。 ヘッダー stdio.h 形式 int fputs(char *hoge, FILE *fo) 返却値 正常時は非負、異常時は EOF を返す。
FILE *fi,*fo; char hoge[256]; /* 文字型の配列 */ fi=fopen("rtest.txt","r"); /* 読み込み用ファイルのオープン */ fo=fopen("wtest.txt","w"); /* 書き込み用ファイルのオープン */ fgets(hoge,256,fi); /* 1行の読み込み */ fputs(hoge,fo); /* 1行の書き出し */ fclose(fo); /* 書き込み用ファイルのクローズ */ fclose(fi); /* 読み込み用ファイルのクローズ */この関数は便利で、最後の文字列の後に、ちゃんとその改行「\n」 が出力される。1行の処理をする関数なので、当たり前である。また、変換処理がないので、printf関数よりも処理が早い。
この関数は次のように使う。fprintf 機能 変換書式に従いファイル(fo))に書き出す。 ヘッダー stdio.h 形式 int fprintf(fo,"%s", hoge) 返却値 正常時は出力されたバイト数を返す。異常時は負の値を返す。
FILE *fi,*fo; char hoge[256]; /* 文字型の配列 */ fi=fopen("rtest.txt","r"); /* 読み込み用ファイルのオープン */ fo=fopen("wtest.txt","w"); /* 書き込み用ファイルのオープン */ fscanf(fi,"%s",hoge); /* 1文字列の読み込み */ fprintf(fo,"%s",hoge); /* 1文字列の書き出し */ fclose(fo); /* 書き込み用ファイルのクローズ */ fclose(fi); /* 読み込み用ファイルのクローズ */