Transcript pptファイル
ファーストイヤー・セミナーⅡ
第12回 ファイル処理
前回のレポート解答例 0から入力した数値まで表示 while 文を使って入力した 数値まで繰り返し
前回のレポート解答例 納得するまでおみくじを引く if 文を使ってランダムに 結果を表示 0 が入力されたら終了
ファイル処理 「ファイル」とは、プログラム等で処理するデータをひとま とめにして記録・保存したもの これまではキーボードと画面(標準入出力)でデータの入 力、出力をおこなってきたが、ファイルから入力・ファイル へ出力することもできる
ファイル処理の手順 ファイルへのデータ入出力は、以下のような手順でおこ なわれる
ファイル位置指定子の宣言 ファイルを用いた入出力処理をおこなう場合、ファイル位 置指定子を宣言する 書式: FILE *ファイル位置指定子 例) FILE *fp 参考) FILE はファイル入出力をおこなう構造体としてstdio.hの 中で定義されている ファイル位置指定子は構造体FILEへの変数として宣言さ れる
ファイルのオープン ファイル処理をおこなう場合、「ファイルをオープン」する 必要がある ファイル処理をおこなうために入出力可能な状態にする、 と思えばよい 書式: ファイル位置指定子 = fopen( “ ファイル名”, “ モード”); 例) fp = fopen( “ data.txt
” , “ r ” );
ファイルのオープンとモード ファイル処理のモードには「書き込み」「読み込み」「追加」な どがある
ファイルのクローズ ファイルの入出力処理が終了したらファイルを閉じる(クロー ズする) 書式: fclose(ファイル位置指定子); 例) fclose (fp);
練習 data.txt という名前のファイルをオープンし、何もせずにクロー ズする(ファイルをオープンする際に、ファイルがなければ自 動的に作成される) 注:ファイルを作成、保存する場所を指定しておくこと。Mドラ イブなら「M:\\ファイル名」とする
ファイルがオープンできないときの処理 何らかの理由でファイルがオープンできない場合があるので、 その際に正常に終了させるため以下の文にしておく ← 「 exit 」を使用するために必要 ↓ おまじないと思って書いておく
ファイルへの入出力 ファイルにデータを書き込んだり、ファイルからデータを読み 出したりするには以下のような関数を使う
ファイルへのデータ書き込み ファイルへの入力には「fputc」、「fputs」、「fprintf」などがある 今回は「fprintf」の使い方を学ぼう 書式: fprintf (ファイル位置指定子, “ 書式文字列”, 引数1, 引数2, … ); 例)整数型の変数x, y を位置指定子 fp のファイルに入力 fprintf (fp, “ %d %d ” , x, y);
ファイルに整数データを書き込む(1) キーボードから整数を10個入力し、ファイルに保存
実行結果の例(1) キーボードから整数を入力し、Enterキーを押すごとに改行され てファイルに保存される 実行結果の例 保存されたファイルの中身
ファイルからの読み込み ファイルからのデータ読み込みには「fgetc」、「fgets」、「fscanf」 がある 今回は fscanf を使用する 書式: fscanf (ファイル位置指定子, “ 書式文字列”, 引数1, 引数2, … ); 例)位置指定子 fp のファイルから整数型の変数x, y にデータ を読み込む fscanf (fp, “ %d %d ” , & x, & y); ※ scanf関数と同様、変数名の前に「&」をつけること
ファイルからデータを読み込んで表示 先ほどのファイルを読み込んで表示 読み込みなので ” r”
ファイルに整数データを書き込む(2) 入力の個数が指定できない場合は以下のようにする ← 変数 x の宣言を忘れないこと ← EOFはデータ、ファイルの 終了を示す
実行結果の例(2) キーボードから整数を入力し、Enterキーを押すごとに改行され てファイルに保存される 入力を終了するには「Ctrl+Z」→「Enter」と押す 実行結果の例 保存されたファイルの中身
ファイルからデータを読み込んで表示(2) データ数が分からない場合の読み込みと表示 読み込みなので ” r”
複数データと文字列の入出力 scanf, printf関数と同様、複数の入出力や文字列の入出力もで きる 文字列を扱う場合の書式は「%s」 文字列を扱うための変数は配列とし、「配列名[バイト数]」と宣 言する(日本語の場合は1文字が2バイト) 例)名前の文字列(配列名 name )、番号(整数型、変数名 number)をファイルに書き出し、読み込み fprintf (fp, “ %s %d ” , name, number); fscanf(fp, “ %s %d ” , name, & number); ※変数が配列名のときのみ、scanf、fscanfの引数に「&」が不要
複数データと文字列の入出力(例) 入力例 M 作成されるファイル
第12回のレポート 以下のプログラムを作成し、メールで提出してください (1)先ほどの「氏名と番号」を入力したファイルを読み込んで、 標準入出力に書き出すプログラム (2)関数 y = x 2 のx, y の組を計算し、ファイルに書き出すプ ログラム(x は –3から3まで0.1間隔とする) ※ 余裕があれば出来たファイルをExcelで読み込んでグラフ にしてみよう