アルゴリズムとデータ構造 補足資料6-2 「サンプルプログラムcat2.c」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志
/. アルゴリズムとデータ構造 サンプルプログラム cat2 /**************************************************************** アルゴリズムとデータ構造 サンプルプログラム cat2.c <<ファイルの例: 入力ファイルを出力ファイルにコピー>> copyright (c) 1995,96,97 T.Mori <mori@forest.dnj.ynu.ac.jp> ****************************************************************/ #include <stdio.h> main() { int c; FILE *infp,*outfp; infp = fopen("test1.txt","r"); /* test1.txt を読み出し用に開く.入力ファイル */ outfp = fopen("testout.txt","w"); /* testout.txt を書き込み用に開く.出力ファイル */ while ((c = getc(infp)) != EOF) /* EOFが現れるまで入力ファイルから文字を読み */ putc(c, outfp); /* 出力ファイルに書き込む */ fclose(infp); /* 各ファイルを閉じる */ fclose(outfp); exit(0); }
ファイル構造体FILE とファイルポインタ OS (ファイルシステム)を通して、特定のファイルにアクセスする。 「ファイルハンドラ」として、ファイルポインタを割り当てる。 プログラムからは、ファイルの「現在位置」に対して読み出し(入力)や書き込み(出力)ができる。
テキストファイル test1.txt ファイルの内容は「文字列」:テキストストリーム ‘ ’(スペース)や‘\n’(改行)も1文字 h i s a t e f l . \n f i l e c o n t a s w . \n EOF ファイルの内容は「文字列」:テキストストリーム ‘ ’(スペース)や‘\n’(改行)も1文字 EOFはファイルの終わりを示す (厳密には、EOFは文字ではない)
一般的なファイルアクセス fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF cat2 は、infpの先頭から1文字ずつ入力を受け取る。 プログラム cat2 infp outfp cat2は 1文字ずつ outfp に出力する。 fopen関数を用いて、ファイルポインタoutfpにtestout.txtを割り当てる。 アクセスの方法は、「書き込み」(出力)
一般的なファイルアクセス T fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF T c = getc( infp ) ? c infp
一般的なファイルアクセス fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF c = getc( infp ) T c
一般的なファイルアクセス fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF putc (c, outfp) T c
一般的なファイルアクセス T fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF cat2は 1文字ずつ outfp に出力する。 → testout.txtに’T’が書き込まれる。 putc (c, outfp) T c T outfp
一般的なファイルアクセス h fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n 1文字進む f i l e c o n t a s w . \n EOF h c = getc( infp ) h c infp
一般的なファイルアクセス h fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF cat2は 1文字ずつ outfp に出力する。 → testout.txtに(’T’に続けて) ’h’が書き込まれる。 putc (c, outfp) h c h outfp
一般的なファイルアクセス i fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n 1文字進む f i l e c o n t a s w . \n EOF i c = getc( infp ) i c infp
一般的なファイルアクセス i fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF cat2は 1文字ずつ outfp に出力する。 → testout.txtに(’h’に続けて) ’i’が書き込まれる。 putc (c, outfp) i c i outfp
一般的なファイルアクセス … … fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n … 1文字ずつ進む f i l e c o n t a s w . \n EOF cat2は 1文字ずつ outfp に出力する。 → testout.txtの最後尾に 出力された文字が書き込まれる。 … c = getc ( infp ) putc( c, outfp) … c … infp outfp
一般的なファイルアクセス fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。 アクセスの方法は、「読み出し」(入力) T h i s a t e f l . \n f i l e c o n t a s w . \n EOF … ファイルの終わり c = getc ( infp ) EOF c infp
一般的なファイルアクセス fclose関数を用いて、 fclose関数を用いて、 ファイルポインタoutfpを閉じる ファイルポインタinfpを閉じる fclose ( infp ) fclose ( outfp ) EOF c infp outfp 終了