Presentation is loading. Please wait.

Presentation is loading. Please wait.

情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公 kyama@tut.jp.

Similar presentations


Presentation on theme: "情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公 kyama@tut.jp."— Presentation transcript:

1 情報・知能工学系 山本一公 kyama@tut.jp
プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公

2 今日の内容 教科書 p.289~ ファイルとストリーム テキストとバイナリ 今日は使い方だけ教えます
fopen, fclose, fscanf, fprintf 標準入出力 テキストとバイナリ fread, fwrite 今日は使い方だけ教えます 考えるだけの知識はまだないので、 深く考えないこと

3 ファイル プログラムを実行する! C言語の「ソースファイル」 結果はどこに? 画面に表示させる! 保存する方法は?
スクロールすると消えてしまう…… 保存する方法は? 「ファイル」に保存! C言語の「ソースファイル」 ハードディスク上に保存されている コンパイラはファイルを読み出して処理する 保存してある情報は読み出せる!ってこと

4 ファイルを開こう(1) ファイルを使えるようにするための操作 まずはFILE構造体へのポインタを宣言! ……何それ?
今は「おまじない」だと思ってください /* p.295 List 13-1 ファイルのオープンとクローズ */ #include <stdio.h> int main(void) { FILE *fp; ← おまじない! fpは変数名なので変えられる  “*”を忘れないように!

5 ファイルを開こう(2) fopen関数でファイルを開く 引数はファイル名とモード “r”で読み込み、“w”で書き込み(p.293参照)
ファイルのオープンとクローズ */ #include <stdio.h> int main(void) { FILE *fp; fp = fopen(“abc”, “r”); /* ファイルのオープン */ ↓「abc」という名前のファイルを読み込みモードで開く

6 ファイルを開こう(3) ファイルのオープンとクローズ */ #include <stdio.h> int main(void)
{ FILE *fp; fp = fopen(“abc”, “r”); /* ファイルのオープン */ if (fp == NULL) printf(“\aファイルをオープンできません。\n”); else { /* ファイルから読込みなどを行う */ ←オープンに失敗すると、fopenはNULLを返す

7 ファイルを閉じる 作業が終わったらファイルを閉じる fclose関数でファイルを閉じる 引数はFILE構造体へのポインタ
if (fp == NULL) printf(“\aファイルをオープンできません。\n”); else { /* ファイルから読込みなどを行う */ fclose(fp); /* ファイルのクローズ */ } return (0);

8 入出力してみよう 今までと同じように入出力しよう! fscanf, fprintf 入出力先を指定する
ファイル構造体へのポインタを使う! それ以外の書式はscanf, printfと同じ scanf(“%d”, &n); fscanf(fp,“%d”, &n); printf(“n = %d\n”, n); fprintf(fp,“n = %d\n”, n);

9 ストリーム ストリーム=流れ ファイルへの入出力はデータの流れ ファイルだけじゃなく、他の入出力も含めて、 全てがデータの流れ
ファイルストリーム ファイルだけじゃなく、他の入出力も含めて、 全てがデータの流れ 標準ストリーム 標準入力・標準出力・標準エラー出力 stdin, stdout, stderr システムが用意している特殊なファイル構造体へのポインタ scanf(“%d”, &n) = fscanf(stdin,“%d”, &n); printf(“n = %d\n”, n) = fprintf(stdout,“n = %d\n”, n);

10 バイナリデータの読み書き(1) バイナリデータ テキストデータ データを保存するのには、コンピュータの内部表現をそのまま用いる方が効率が良い
ビットの並びで表現されたデータ コンピュータの内部表現 テキストデータ 人間が読めるデータ ASCIIコードなど データを保存するのには、コンピュータの内部表現をそのまま用いる方が効率が良い 教科書 p.307, Fig.13-8

11 バイナリデータの読み書き(2) ファイルのオープンはバイナリモードですること! 閉じるのは同じ
fp = fopen(“abc”, “rb”); fp = fopen(“def”, “wb”); fclose(fp);

12 バイナリデータの読み書き(3) ファイルからデータを読み込む:fread関数 ファイルにデータを書き出す:fwrite関数
第1引数は読み込んだデータを入れる変数(”&”を付けること!) 第2引数の”sizeof”にデータを入れる変数の型を与える 上の例では”int” 第3引数は配列を覚えるまでは”1”で固定 第2引数×第3引数[byte]のデータを読み込む ファイルにデータを書き出す:fwrite関数 引数の順序・書式はfreadと同じ 第1引数に入っているデータをバイナリ形式でファイルに書き出す int x; fread(&x, sizeof(int), 1, fp); float x; fwrite(&x, sizeof(float), 1, fp);

13 難しい? 構造体とポインタが絡む話なので、 正しく理解できるようになるのはまだ先
だから、教科書の最後の章にあるのだ! 今は、丸のみで覚えて、とりあえず 使えるようにだけなってください 配列を扱うようになると、 バイナリデータの読み書きが役に立つ!

14 今週の課題 整数値を3つキーボードから読み込んで、それをテキスト形式でファイルに書き出すプログラムを作成・実行せよ。1行に1つの数字を書き出すこと。書き出すファイル名は”kadai1-1.dat”とせよ。 課題1で作成したファイルから整数値を3つ読み込んで、それをバイナリ形式でファイルに書き出すプログラムを作成・実行せよ。書き出すファイル名は”kadai1-2.dat”とせよ。そして、データを書き出したファイルの内容を、教科書 p.310のList 13-10のプログラムを使って表示・確認せよ。

15 レポートについて 電子メールで提出 提出先は prog2@slp.cs.tut.ac.jp
Subjectを「プログラミング演習2 課題1 学籍番号・氏名 」とすること C言語ソースファイルを添付する メールの本文には何も書かなくて良いです ソースファイルの頭にコメントで以下の情報を入れる 学籍番号・氏名 プログラムの説明(どのように動くのか、工夫した点等) 実行結果(長い場合は一部)を貼る 提出締切は、10月17日(水) 12:00 (1週間後)

16 授業用Webサイト URL: http://www.slp.cs.tut.ac.jp/~kyama/programming2/
課題のpdfファイルが置いてあります。 授業で使ったpptファイルを置いていきます。 質問メールは、以下のどちらかのアドレスまで C-515へ直接質問しに来ても構いません


Download ppt "情報・知能工学系 山本一公 kyama@tut.jp プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公 kyama@tut.jp."

Similar presentations


Ads by Google