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
出力ファイル名 : pro1-1.txt

 pro2-3.cのプログラムと比べてみなさい。実行列のように入力ファイル名と出力ファイル名を入力する。結果はファイルに出力されるので何も表示されない。ファイルに出力されているかどうかは、次のコマンドで確認する。


        --- MS-DOS ---                          --- UNIX ---
        > TYPE pro1-1.txt                       % cat pro1-1.txt


【練習問題2-17】 テキストファイルの内容の指定した範囲を、行番号付きでファイルに出力する。
 ヒント:【練習問題2-12】参照
実行結果

入力ファイル名 : pro1-1.c
出力ファイル名 : pro1-1.txt
表示開始行 : 6
表示終了行 : 8


 




テキストファイルの内容を暗号化してファイルに出力する。[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
出力ファイル名 : pro1-1.txt





【練習問題2-18】 pro2-10.cで作成した暗号を解読してファイルに出力する。

ヒント:【練習問題1-8】参照

 


前へ 目次へ 次へ 
Copyright © 2001 Hiroshi Masuda 

 

 

inserted by FC2 system