スライド 1 - 横浜国立大学 富井研究室

アルゴリズムとデータ構造
補足資料6-2
「サンプルプログラムcat2.c」
横浜国立大学
理工学部
数物・電子情報系学科
富井尚志
/****************************************************************
アルゴリズムとデータ構造
サンプルプログラム cat2.c
<<ファイルの例: 入力ファイルを出力ファイルにコピー>>
copyright (c) 1995,96,97 T.Mori <[email protected]>
****************************************************************/
#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
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
f i l e . \n
t w o
T h i s
l i n e s . \n
•ファイルの内容は「文字列」:テキストストリーム
•‘ ’(スペース)や‘\n’(改行)も1文字
•EOFはファイルの終わりを示す
(厳密には、EOFは文字ではない)
EOF
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
f i l e . \n
t w o
T h i s
l i n e s . \n
EOF
cat2 は、infpの先頭から1文字ずつ入力を受け取る。
infp
プログラム
cat2
outfp
cat2は 1文字ずつ outfp に出力する。
fopen関数を用いて、ファイルポインタoutfpにtestout.txtを割り当てる。
アクセスの方法は、「書き込み」(出力)
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
T
infp
a
t e s t
c o n t a i n s
c
?
c = getc( infp )
f i l e . \n
t w o
T h i s
l i n e s . \n
EOF
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
c
T
c = getc( infp )
f i l e . \n
t w o
T h i s
l i n e s . \n
EOF
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
c
T
putc (c, outfp)
f i l e . \n
t w o
T h i s
l i n e s . \n
EOF
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
c
T
putc (c, outfp)
f i l e . \n
t w o
T h i s
l i n e s . \n
EOF
cat2は 1文字ずつ outfp に出力する。
→ testout.txtに’T’が書き込まれる。
outfp
T
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
a
t e s t
f i l e . \n
T h i s
1文字進む
f i l e
h
infp
c o n t a i n s
c
h
c = getc( infp )
t w o
l i n e s . \n
EOF
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
c
h
putc (c, outfp)
f i l e . \n
t w o
T h i s
l i n e s . \n
EOF
cat2は 1文字ずつ outfp に出力する。
→ testout.txtに(’T’に続けて)
’h’が書き込まれる。
outfp
h
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
a
t e s t
f i l e . \n
T h i s
1文字進む
f i l e
i
c o n t a i n s
c
infp
i
c = getc( infp )
t w o
l i n e s . \n
EOF
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
c
i
putc (c, outfp)
f i l e . \n
t w o
T h i s
l i n e s . \n
EOF
cat2は 1文字ずつ outfp に出力する。
→ testout.txtに(’h’に続けて)
’i’が書き込まれる。
outfp
i
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
a
t e s t
…
f i l e
…
infp
T h i s
1文字ずつ進む
c o n t a i n s
c
f i l e . \n
…
c = getc ( infp )
putc( c, outfp)
t w o
l i n e s . \n
EOF
cat2は 1文字ずつ outfp に出力する。
→ testout.txtの最後尾に
出力された文字が書き込まれる。
outfp
…
一般的なファイルアクセス
fopen関数を用いて、ファイルポインタinfpにtest1.txtを割り当てる。
アクセスの方法は、「読み出し」(入力)
T h i s
i s
f i l e
a
t e s t
c o n t a i n s
f i l e . \n
t w o
T h i s
l i n e s . \n
…
ファイルの
終わり
infp
c
EOF
c = getc ( infp )
EOF
一般的なファイルアクセス
fclose関数を用いて、
ファイルポインタoutfpを閉じる
fclose関数を用いて、
ファイルポインタinfpを閉じる
c
infp
EOF
fclose ( infp )
fclose ( outfp )
outfp
終了