24
本本本本本 本本本本本本本本本本本本本本本本本 本本本本本本本本fprintf() 本本本本本本本本本 :fscanf()

本日の内容

Embed Size (px)

DESCRIPTION

本日の内容. ファイル処理の基本を学習しましょう。 ファイルへの出力: fprintf() ファイルからの入力 :fscanf(). ファイル処理. ファイルへの出力,ファイルからの入力について学習します。 「名前を付けて保存」,「上書き保存」,「ファイルを開く」,の関数を作ります。 これにより,「新規作成」,「ファイルを閉じる」,の機能も実現できます。. ファイル処理とは? 「ファイルから読み込む」. つまり,この仕組みを勉強するということです。. ファイルの内容を表示します. 「ファイルを開く」を選んで. ファイル名を指定して. - PowerPoint PPT Presentation

Citation preview

Page 1: 本日の内容

本日の内容

ファイル処理の基本を学習しましょう。ファイルへの出力: fprintf()ファイルからの入力 :fscanf()

Page 2: 本日の内容

ファイル処理

ファイルへの出力,ファイルからの入力について学習します。「名前を付けて保存」,「上書き保存」,「ファイルを開く」,の関数を作ります。

これにより,「新規作成」,「ファイルを閉じる」,の機能も実現できます。

Page 3: 本日の内容

ファイル処理とは?「ファイルから読み込む」

つまり,この仕組みを勉強するということです。

「ファイルを開く」を選んで

ファイル名を指定して

ファイルの内容を表示します

Page 4: 本日の内容

ファイル処理とは?「ファイルに書き込む」

つまり,この仕組みを勉強するということです。

「名前を付けて保存」を選んで

新しいファイル名を入力して

新しいファイル名で保存します。

Page 5: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているの?ファイルを読み込んだり,ファイルに書き込んだりする時に,コンピュータの中でどのようにデータ処理されているかを理解すると,C言語でのファイル処理のプログラムが理解しやすくなります。

??

ファイル処理命令

Page 6: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているの?

メモ帳が起動されると・・

メインメモリ(主記憶)の中に・・・

メモ帳のための場所

メモ帳のための領域が作られます。

Page 7: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているのか?

「ファイル」→「開く」を選択し,

ファイル名を指定して開くと,

メモ帳のための場所

メインメモリハードディスク等(補助記憶)の中のファイルが,そのメモリ領域に読み込まれます。

test.txt の場所

そのファイルのための場所が確保され,

ABC

Page 8: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているのか?

メモ帳のための場所

メインメモリ

test.txt の場所

ABC

次に,メモリに読み込まれた内容を画面に表示する方法を考えます。

画面上の表示

<手順>•メモリ内のデータが読み込まれた場所を指定 します。•その場所から,データを変数へ入力します。•変数の値を printf 等を使い画面に表示します。

Page 9: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているのか?

メモ帳のための場所

メインメモリ

test.txt の場所

ABC

メモリ内にファイルが読み込まれると,ファイルデータのどの場所からデータを読み込むのか,どの場所に新しいデータを加えるのか,メモリ内で場所の指定をする必要があります。

そこで,ファイルを開いた時,メモリ内での場所を指定するために特別な変数を用意します。これを「ファイルポインタ」といいます。

ファイルポインタ ファイルポインタは,最初はファイルデータの先頭を指定しています。

Page 10: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているのか?

メモ帳のための場所

メインメモリ

test.txt の場所

ABC

ファイルポインタ

ファィルポインタが指定している場所からデータを受け取り,変数へ代入します。この場合は1行の文字列データを受け取ります。

fgets( 変数名,最大文字数,ファイルポインタ名 )

ファイルポインタの指定場所から1行分のデータを受け取り,変数へ代入するには, fgets を使います。

ABCという1行データが変数へ読み込まれた後は,ファイルポインタは自動的に次の行の先頭(まだ読み込んでいない場所)に移動します。

Page 11: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているのか?

メモ帳のための場所

メインメモリ

test.txt の場所

ABC

ファイルポインタ

ファィルポインタが指定している場所からデータを受け取り,変数へ代入します。この場合は1行の文字列データを受け取ります。

fgets( 変数名,最大文字数,ファイルポインタ名 )

ファイルポインタの指定場所から1行分のデータを受け取り,変数へ代入するには, fgets を使います。

ABCという1行データが変数へ読み込まれた後は,ファイルポインタは自動的に次の行の先頭(まだ読み込んでいない場所)に移動します。

これを繰り返してデータを変数へ読み込みます。変数値は printf などで画面に表示されます。

Page 12: 本日の内容

「名前を付けて保存」を選んで

新しいファイル名を入力すると・・・

ファイル処理とは?その時,コンピュータはどう動作しているのか?

メモ帳のための場所

メインメモリ

test.txt の場所ABC

ファイルポインタ①

test2.txtの場所

ファイルポインタ②

新しいファイル名の領域が確保されて,ファイルポインタも別のものが用意されます。

Page 13: 本日の内容

ファイル処理とは?その時,コンピュータはどう動作しているのか?

メモ帳のための場所

メインメモリ

test.txt の場所ABC

ファイルポインタ①

test2.txtの場所

ファイルポインタ②

fgets などで,変数へ代入され,処理が加えられている(例:文字の書き換えなど)とします。

DEF

書き換えられた変数値が,新しいファイルの場所,ファイルポインタが指している場所に書き込まれます。 fputs などが使われます。

注意:上書き保存の時は,元の test.txt の場所

ファイル処理を終了する命令があったり,メモ帳自体を終了する時に,補助記憶へ書き込まれます。

Page 14: 本日の内容

以上の,コンピュータ内での動作を整理します。ファイルを「開く」時 開くファイル名を入力する。 メモリ内に領域が確保され, HDDなど補助記憶装置のファイルデータがその領域にコピーされる。

メモリ上でのファイルデータの位置を表すファイルポインタ (fp)が割り当てられる。

fpの位置からデータを変数へ読み込み,変数値を画面に表示したり処理したりする。

ファイルに「保存する」(書き込む)時 保存するファイル名を指定する。 メモリ内に領域が確保され, fpが割り当てられる。 fpの位置にファイル保存したい変数値が書き込まれる。 ファイル処理を終了したり,プログラム自体を終了した時,メモリ上の内容が, HDDなど補助記憶装置にファイルとして保存される。

どちらの場合も,直接,補助記憶装置内のデータを処理しているわけではないことに注意!

ファイル処理とは?その時,コンピュータはどう動作しているの

か?

Page 15: 本日の内容

ファイル処理の手順ファイルポインタを準備する。ファイル中の,現在の読み書き位置を指定するためのポインタです。

ファイルをオープンし,ファイルポインタに割り当てる。使用するファイル名と利用目的(オープンモード)を指定してファイルを開きます(オープンします)。

読み込みの場合,ファイルが HDDなど補助記憶装置から主記憶に読み込まれます。書き込みの場合,そのための領域が主記憶に確保されます。その先頭位置をファイルポインタが指し示します。

fopen()関数が用いられます。

Page 16: 本日の内容

ファイル処理の手順ファイルポインタが指している領域からデータを読み込む(変数へ取り込む),またはその領域にデータ(変数の値)を書き込む,などの処理を行います。ファイル処理が終わったらファイルをクローズします。クローズすることにより,ファイルポインタとファイルとの関係が切れます。

主記憶中のファイルが補助記憶装置内へ保存されます。つまり,クローズしない限りファイルの変更は反映されません。

fclose()関数を用います。

Page 17: 本日の内容

ファイルポインタの準備とファイルのオープン

#include<stdio.h>

FILE *fp;fp=fopen(“ 名”ファイル , “ オープンモー

”ド );

Page 18: 本日の内容

重要なオープンモード

モード 処理 ファイルがないとき

ファイルがあるとき

“r”読み込み(read)

NULLを返す 正常処理

“w”書き込み(write)

新規作成 前の内容を捨てる

Page 19: 本日の内容

ファイル入出力関数-1

関数 説明

fprintf(fp,format,引数 )ファイル fpに書式 formatで出力。 format,引数の書き方は printfに同じ

fscanf(fp,format,引数 )ファイル fpから書式 formatで入力。 format,引数は scanfに同じ

Page 20: 本日の内容

演習

ensyu10.cを完成させましょう。「名前を付けて保存」関数 output_file( )を完成させてください。保存するデータ(変数)に注意しましょう。何をファイルへ保存する必要があるでしょうか?

Page 21: 本日の内容

演習

ensyu11.cを完成させましょう。「ファイルを開く」関数 open_file( )を完成させてください。目的のファイルがなかった場合,「ファイルが開けません」とメッセージを出してプログラムを終了するにはどうすればよいでしょうか?

Page 22: 本日の内容

ファイルの内容の変更ファイルを開いて,内容を変更して,保存する場合は,次の手順によります。ファイルを rモードで openする。ファイルの内容を変数へ読み込む。変数の内容を操作(変更)する。ファイルを wモードで openする。変数の値をファイルへ書き込む。

この時,最初と同じファイル名であれば「上書き保存」,異なるファイル名なら「名前を付けて保存」になります。

Page 23: 本日の内容

演習ensyu12.cを完成させましょう。ファイルを読み込んだ後,何らかの処理を加えたとします。処理後のファイルを保存します。「上書き保存」関数 overwrite_file( )を完成させてください。「上書き保存」か「名前を付けて保存」かを選択できるようにしましょう。

Page 24: 本日の内容

課題「データの追加」を関数化してください。「上書き保存」を選択した場合に,ファイル名を表示した上で,「本当に上書きして良いか」を確認してから保存するように, overwrite_file()を変更してください。「名前を付けて保存」を選択した場合に,既に同名のファイルが存在したとき,再度ファイル名の入力を促すように output_file()を変更して下さい。