C言語 ファイル出力 一行毎に出力






スポンサードリンク

以前少しファイルの入出力について説明させて頂きました、今回もう少しいろんな関数も絡めて
説明させていただきたいと思います。
前回説明分参照は←メニューの【 ファイルの読み込み 】【 ファイルの書き込み 】【 コメントを書いてみるのファイル出力 】

ファイルの操作は【 FILE *任意のポインタ名 】ファイルポインタを利用する点と、【 fopen() 】ファイルを開く【 fclose() 】ファイルを閉じるの点に気をつけると理解しやすいと思います。特に【 fopen() 】ファイルを開く場合"r"(read)読み込みなのか"w"(writ)書き込みなのかの部分に注目みるといいと思います。

例:testfile.txtと言うテキストファイルを読み込みしたいとします。
※ヘッダ宣言・メイン関数等は省略しております。
【 file=fopen("testfile.txt","r"); 】書き込みたい場合は"r"を指定
※tesifaile.txtと言うファイルが存在しない場合はエラーになります。

#FILE *file;
file=fopen("testfile.txt","r");
/*任意の実行文*/
fclose(file);

もし万が一指定したファイルが見つからない場合はエラー(NULL)になります。
その場合プログラムが暴走しかねないので、念の為強制終了分を付け加えるのが基本になります。

【 if(file==NULL)exit(1); 】戻り値が(NULL)エラーの場合はexit(1)でプログラムの実行を終了するの分です。

#FILE *file;
file=fopen("testfile.txt","r");
if(file==NULL)exit(1);
/*任意の実行文*/
fclose(file);


例:testfile.txtと言うテキストファイルに書き込みしたいとします。
【 file=fopen("testfile.txt","w"); 】書き込みたい場合は"w"を指定
※tesifaile.txtと言うファイルが存在しない場合はエラーになります。

#FILE *file;
file=fopen("testfile.txt","w");
if(file==NULL)exit(1);
/*任意の実行文*/
fclose(file);


何かの文字を書き込みたい場合は【 fputc() 】(一文字ファイルへ出力)【 fputs() 】(一行ファイルに出力)でファイルに出力(書き込む事が可能)する事が可能。
※基本的に開いたファイルに出力する場合は上書きになり、以前の内容は上書きされてしまいます。

#FILE *file;
file=fopen("testfile.txt","w");
if(file==NULL)exit(1);
/*任意の実行文*/
fputc('A',file);
fputc("あ",file);
fputs('ABCdefg',file);
fputs("あかかげまる",file);
fclose(file);


今回のサンプルは【 while(1) 】無限ループを使って、繰り返し任意のテキストファイルに、
複数行出力させて見たいと思います。
サンプル(ソースをコピーしてメモ帳に貼り付けしコンパイルできます。)

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

FILE *fi;
char finm[80];
char ss[80];

printf("保存ファイル名をtxt形式で指定して下さい:");
gets(finm);

fi=fopen(finm,"w");
if(fi==NULL){
printf("%sがオープンできません.\n");
exit(1);
}

while(1){
printf("文字を入力して下さい:");
gets(ss);
fputs(ss,fi);

fputc('\n',fi);

printf("\n");

if(ss[0]==0)break;
}

fclose(fi);

return 0;
}

解説
肝心な記述は上記で説明済みなので、図には記載しておりません。
【 FILE *fi 】ファイルを扱う際に必要なファイルポインタ(任意のものでOKです)を一つ宣言します。
文字列型配列【 charfinm[任意の配列数] 】はファイル名の書き出しように用意【 charss[任意の配列数] 】は任意の文字列を書き込み(出力)する為に用意しております。
【 fi=fopen(finm,"w") 】の部分を最初から用意したファイルを指定する場合は【 fi=fopen("任意のファイル名.txt","w") 】とすればOKです。
【 while(1) 】無限ループは変数配列【 ss 】の「ss[0]」に文字列終端マーク「0」が代入されると【 exit(1) 】でループを終了させております。プログラム実行中に、「未入力」すると必然的に配列のss[0]に0が代入されループは終了し作業完了となります。
c言語ファイル出力

上記の出力結果
作成するファイル名は任意のものでOKです。新規に作成されます。
一行入力欄に未入力で実行(Enterキー)すると文字終端マーク0が代入されループ終了となります。
出力処理結果を見るには通常通りフォルダを開いて確認してもOKですし。
コマンドラインからそのまま【 type 任意のファイル.txt 】とすれば出力内容を確認することが出来ます。


追記処理する場合
上記の【 if=fileopen(finm,"w"); 】は出力処理になるのですが、同一ファイルを処理すると上書きされ前のデータは残りません。前のデーターに追記上書きする方法は"w"を"a"とすれば追記処理が出来ます。
【 if=fileopen(finm,"w"); 】→【 if=fileopen(finm,"a"); 】
"a"追記用にファイルを開き処理するのと、指定したファイルがない場合は新規に作成され出力しょりされます。
※処理内容は上記までの説明と同じですが、追記型になります。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{

FILE *fi;
char finm[80];
char ss[80];

printf("保存ファイル名をtxt形式で指定して下さい:");
gets(finm);

fi=fopen(finm,"a");
if(fi==NULL){
printf("%sがオープンできません.\n");
exit(1);
}

while(1){
printf("文字を入力して下さい:");
gets(ss);
fputs(ss,fi);

fputc('\n',fi);

printf("\n");

if(ss[0]==0)break;
}

fclose(fi);

return 0;
}


説明は以上です

あかかげまるのC言語入門はこちら!!

スポンサードリンク

パソコン勉強部屋 | パソコン勉強部屋2 | ADSL勉強部屋 | メール勉強部屋 | LAN勉強部屋 | ホームページ勉強部屋 | 自宅サーバー勉強部屋 | お役立ちソフトの部屋 | C言語勉強 | 無料ゲーム | 無料セキュリティー | Linuxのコーナー | あかかげまる | オンライン通販 | ショップブランドパソコン | DVDとCD編集ツール

 Subscribe in a reader


ページトップへ