応用 C プログラミング演習 ( 第 9
回 )
西
今日のテーマ:テキストファイルを読み出
して,その内容を表示するプログラムを作
ろう
各自,あらかじめ,「メモ帳」を使って,
以下のテキストファイルを作っておくこと
「 SOJO UNIVERSITY 」という 1 行の文
字列を入れたファイル
ファイル名:「 mytext.txt 」.保存場所
はどこでも良い
文字単位の読み込みには fgetc を用いる
ファイル読み込み操作のプログラムの様
子
#include<stdio.h>
void main( ){
FILE *fp;
fp=fopen( ファイル名 , "r");
... 処理 ( fgetc を使うとよ
い ) ...
fclose(fp);
}
fp というポイン
タをファイル構造
体で宣言 ( おまじ
ない )
fp というポイン
タをファイル構造
体で宣言 ( おまじ
ない )
ファイルを
read モードで
開く
ファイルを
read モードで
開く
fp で開いたファ
イルを閉じる
fp で開いたファ
イルを閉じる
#include<stdio.h>
解答例
void main( ){ FILE *fp; char c;
fp=fopen("e:\mytext.txt", "r"); if(fp==NULL){
printf(" ファイル (mytext.txt) がオープンできませんでした. \n"); return;
}
while(1){ c=fgetc(fp); if(c==EOF){ break;
}
printf("%c",c); }
fclose(fp); }
ファイルを
read モードで
開く
ファイルを
read モードで
開く
おまじな い
おまじな い
ファイルオープンに失 敗したときの処理
ファイルオープンに失 敗したときの処理
ファイルの最後尾を見つけ る
ファイルの最後尾を見つけ る
1 文字ファイルから読 む
1 文字ファイルから読 む
読み出した 1 文字を表示す る
読み出した 1 文字を表示す る
ファイルを閉じ る
ファイルを閉じ る
永久に繰り返し 永久に繰り返し
ファイルの書き込みも同様
#include<stdio.h>
void main( ){
FILE *fp;
fp=fopen( ファイル名 , "w");
... 書き込み処理 ...(fputc 関数を使うとよい )
fclose(fp);
}
解答例
#include<stdio.h>
#include<string.h> void main( ){
FILE *fp;
char c[ ]= "What a wonderful world!"; int i,textlen;
fp=fopen("e:\writetext.txt", "w"); if(fp==NULL){
printf(" ファイル (writetext.txt) がオープンできませんでし た. \n");
return; }
textlen= strlen(c);
for(i=0;i<textlen;i++){ fputc(c[i],fp);
}
fclose(fp); }
ファイルを
write モードで
開く
ファイルを
write モードで
開く
ファイルオープンに失 敗したときの処理
ファイルオープンに失 敗したときの処理
文字列の長さを調べる処 理
文字列の長さを調べる処 理
文字列の長さ分ファイル に書き込む処理
文字列の長さ分ファイル に書き込む処理
バイナリファイルの読み書き
バイナリファイルとは?
テキストファイルとはどこが違うのか?
ファイルの種類
テキストファイル
文字データからなるファイルである
8bit の英数かな文字, 16bit のひらがな,漢字などがある
通常,○○○ .txt というファイル名になっている
このほか, html ファイル, ini ファイル, tex ファイル, c 言語のソースプログラムなどもテキストファイル形式である
1 文字ごとに ASCII コード, JIS コードなどの文字コード表 にて国際的に約束された数字 (コード )に変換されてファイ ルに格納される
「行」「改行」の概念がある→改行は CRLF であり「 \n 」 に変換される
バイナリーファイル
テキストファイル以外のファイルはバイナリ形式である.
音声,画像,映像などはバイナリーファイル
ワープロなどの文書ファイルも概ねバイナリーファイル
「行」「改行」の概念がない
使い方の違いは,パラメータだけ
FILE *fp は同じ
fp=fopen("e:\filename.bin,"rb");
fp=fopen("e:\filename.bin,"wb");
とすればよい
読み書きの関数としては
fread() と fwrite() を使う
テキストファイル読み込み練習問
題
テキストファイル名をキーボードから読み込み
,そのファイル名のファイルを読み込み, 1 文
字ずつ縦に並べて表示するプログラムを作れ
これに先立ち,「メモ帳」を使って,「 SOJO
UNIVERSITY 」という内容のテキストファイル
を「 mytext.txt 」というファイル名で作って
おくこと.
フォルダーの場所は自分で覚えておくこと
フローチャートはこうなります
include 文 main() 変数の宣言文
ファイルポインターのファイル構造体宣言 ファイルのオープン
ファイルのオープンエラー時のメッセージ 繰り返し処理 ()
1 文字読み取り その他の処理 ファイルのクローズ
ヒント:プログラムの構造はこうなり
#include<stdio.h>
ます .
void main( ){ FILE *fp;
char c,filename[100];
◆[ scanf() 関数を使って,キーボードからファイル名を読み込む処理]◆ fp=fopen( 入力されたテキストファイル名 , "r");
if(fp==NULL){
printf(" ファイル ( 入力されたテキストファイル名 ) がオープンできません でした. \n");
return; }
while(1){ c=fgetc(fp); if(c==EOF){ break;
}◆[ printf() 関数を使って,一文字ずつ縦に表示する処理] ◆ }
fclose(fp); }
#include<stdio.h> void main( ){
FILE *fp;
char c,filename[100];
◆[ scanf() 関数を使って,キーボードからファイル名を読み込む処理]◆ fp=fopen( 入力されたテキストファイル名 , "r");
if(fp==NULL){
printf(" ファイル ( 入力されたテキストファイル名 ) がオープンできません でした. \n");
return; }
while(1){ c=fgetc(fp); if(c==EOF){ break;
}◆[ printf() 関数を使って,一文字ずつ縦に表示する処理] ◆ }
fclose(fp); }
#include<stdio.h>
回答例
#include<string.h> void main( ){
FILE *fp;
char c,filename[100]; scanf("%s",filename); fp=fopen(filename, "r"); if(fp==NULL){
printf(" ファイル (%s) がオープンできませんでした. \n",filename); return;
}
while(1){
c=fgetc(fp); if(c==EOF){
break; }
printf("%c\n",c); }
fclose(fp); }