プログラミング 2 ファイル処理
ファイル入出力の 基本的な手順 ファイルを開く ファイルから読み込む/ファイルに書き込む ファイルを閉じる fopen() 関数 読み込み:fscanf() 関数など 書き込み:fprintf() 関数など ファイルを閉じる fclose() 関数
ファイルを開く(1) FILE * 型の変数を用意する これはポインタ(ポインタについてはプログラミング 3 で扱 う) たとえば FILE *fp; FILE *fin, *fout; のように定義
ファイルを開く(2) fopen() 関数でファイルを開く fp = fopen(ファイル名, 開き方); ファイル名は文字列で与える 「開き方」には次のようなものがある “r”:読み込み “w”:書き込み “a”:追記 ファイルが開けたら,以降 fp を介してファイルとや り取りする
ファイルを開く(3) ファイルを開けない場合 fopen() は記号定数 NULL を返す 読み込むファイルが見つからなかったとき 書き込むファイルが作れなかったとき fopen() の戻り値はチェックする fp = fopen(“data.txt”, “r”); if (fp == NULL) { /* ファイルが開けなかったときの処理 */ } 短いプログラムでは,ファイルを開く処理が失敗した場合, プログラムを終了させてしまうことが多い
ファイルの読み書き(1) fscanf() 関数(読み込み) fscanf(fp, …); scanf() のファイル指定版;第 1 引数に fopen() 関数で得た FILE * の値を指定する fscanf(fp, “%d”, &a); fprintf() 関数(書き込み) fprintf(fp, …); printf() のファイル指定版;第 1 引数に fopen() 関数で得た FILE * の値を指定する fprintf(fp, “%d\n”, a);
ファイルの読み書き(2) その他のファイル読み書き関数 fgetc():1 文字読み込み(cf. getchar()) fgets():文字列 1 行読み込み(cf. gets()) fputc():1 文字書き込み(cf. putchar()) fputs():文字列 1 行書き込み(cf. puts())
ファイルを閉じる fclose() 関数 fclose(fp); ファイルに対応する FILE * を引数に与える 正常終了時に 0,異常終了時に EOF を返すが,検査しない ことが多い
ファイル入出力の手順まとめ FILE *fp; fp = fopen(…); If (fp == NULL) { /* 開けなかったときの処理 */ } /* ファイルの読み書き処理 */ fclose(fp);
ストリーム(1) プログラムから見た,入出力先へのデータの流れ:ス トリーム ストリーム ファイル プログラム 画面 キーボード ファイル ストリームを表すのが FILE * ストリームをつなげるのが fopen() プログラムから見ると,ストリームの先はすべてファイルの ように見える(キーボード・画面・プリンタも!) ストリーム ファイル プログラム 画面 キーボード ファイル
ストリーム(2) 標準入力・標準出力という「プログラムが開始された ときからつながっているストリーム」がある 標準入出力用の入出力関数 標準入力:通常はキーボードにつながっている 標準出力:通常は画面につながっている 標準入出力用の入出力関数 scanf() は,入力元を標準入力にした特別な fscanf() printf() は,出力先を標準出力にした特別な fprintf() fscanf()・fprintf() では,標準入力を stdin,標準出力を stdout で指定することができる 標準入出力は,実行時などに指定してキーボード・画 面以外(ファイルなど)に接続することができる リダイレクトという