C言語-ファイル処理 |
2.2 テキストファイルの書き込み
処理結果などを残しておく必要がある場合、プリンタに出力する方法やファイルに書き込む(出力する)方法がある。処理手順は読み込みと同じである。
テキストファイルの内容を行番号付きでファイルに出力する。[pro2-9.c]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: |
#include <stdio.h> #include <stdlib.h> #define STR_MAX 256 /* 文字列入力用配列長 */ int main(void) { FILE *fi, *fo; /* ファイルポインタ用 */ char fin[80], fout[80]; /* ファイル名用 */ char buff[STR_MAX]; /* 文字列用 */ int line = 0; /* 行数カウント用 */ printf("入力ファイル名 : "); /* プロンプト表示 */ gets(fin); /* ファイル名入力 */ printf("出力ファイル名 : "); /* プロンプト表示 */ gets(fout); /* ファイル名入力 */ if((fi = fopen(fin, "r")) == NULL){ /* 入力ファイルオープン */ printf("入力ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } if((fo = fopen(fout, "w")) == NULL){ /* 出力ファイルオープン */ printf("出力ファイルがオープンできません\n"); exit(1); /* 強制終了 */ } while(fgets(buff, STR_MAX, fi) != NULL){ /* 1行読み込み */ ++line; /* 行数カウント */ fprintf(fo, "%d:%s", line, buff); /* 1行出力 */ } fclose(fi); /* 入力ファイルクローズ */ fclose(fo); /* 出力ファイルクローズ */ return(0); } |
入力ファイル名 : pro1-1.c |
pro2-3.cのプログラムと比べてみなさい。実行列のように入力ファイル名と出力ファイル名を入力する。結果はファイルに出力されるので何も表示されない。ファイルに出力されているかどうかは、次のコマンドで確認する。
--- MS-DOS --- --- UNIX --- > TYPE pro1-1.txt % cat pro1-1.txt
入力ファイル名 : pro1-1.c |
テキストファイルの内容を暗号化してファイルに出力する。[pro2-10.c]
ヒント:ren1-7.cのプログラム同様、文字コードに1を加算して暗号文を作成することにする。
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: |
#include <stdio.h> #include <stdlib.h> #define STR_MAX 256 int main(void) { FILE *fi, *fo; /* ファイルポインタ用 */ char fin[80], fout[80]; /* ファイル名用 */ char buff[STR_MAX], *pb; /* 入力文字列 */ printf("入力ファイル名 : "); gets(fin); printf("出力ファイル名 : "); gets(fout); if((fi = fopen(fin, "r")) == NULL){ printf("入力ファイルがオープンできません\n"); exit(1); } if((fo = fopen(fout, "w")) == NULL){ printf("出力ファイルがオープンできません\n"); exit(1); } while(fgets(buff, STR_MAX, fi)){ /* 1行読み込み */ pb = buff; /* ポインタ変数初期化 */ while(*pb != '\n'){ /* 改行文字まで繰り返す */ *pb = *pb + 1; /* 暗号に変換 */ ++pb; } fprintf(fo, "%s", buff); /* 出力 */ } fclose(fi); fclose(fo); return(0); } |
入力ファイル名 : pro1-1.c |
ヒント:【練習問題1-8】参照
Copyright © 2001 Hiroshi Masuda |