C言語のきほん「ファイルの入出力(1)」

スポンサーリンク
C言語

文字列が保存されたファイルをテキストファイルという。一方、音声データや画像ファイルのように、文字として読み込むことができない情報を含むファイルをバイナリファイルという。

テキストファイルの中身を読むには、次にような手順で行う。

1 ファイルを開く(fopen関数)
2 ファイルから文字列を読み込み、読み取った内容に対して処理を行う。(fgets関数など)
3 ファイルを閉じる(fclose関数)

それでは、テキストファイルを1行ずつ読み込むプログラムをご紹介しよう。

なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.90.2)を使用して作成し、gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0でコンパイルしている。

読み込むテキストファイル

All our dreams can come true, if we have the courage to pursue them. 
I only hope that we do not lose sight of one thing 
 that it was all started by a mouse.
//テキストファイルを読み込むプログラム

#include <stdio.h>

int main(void)
{
    FILE *fp = NULL;
    char line[128];

   fp = fopen("sample.txt","r");
    if (fp == NULL){
        printf("ファイルを開けませんでした!\n");
        return 1;
    }

    while (fgets(line,128,fp) != NULL) {
        printf(">>> %s",line);
    }
    
    fclose(fp);
    return 0;
    
}

実行結果

>>> All our dreams can come true, if we have the courage to pursue them.
>>> I only hope that we do not lose sight of one thing
>>>  that it was all started by a mouse.

7行目のFILEは、ファイルの入出力に関する情報を格納する型である。
このFILE *型のポインタ変数(ファイルポインタまたはストリームという)がファイル操作で大切な役割をする。

10行目で、fopen関数でファイルを開いている。

ファイルを開くときのモードと、ファイルに対する操作の内容

モード説明
“r”読み込み用に開く(ファイルが存在しないときはエラー)
“w”書き込み用に開く(ファイルが存在しないときは新規作成)
“a”追記用に開く(ファイルの末尾に追記。ファイルが存在しないときは新規作成)
“r+”読み書き両用にする

ファイルを開くことができたら、その中に書かれている文字を読み込む。

16行目ではfgets関数を使用している。

fgets関数の戻り値がNULLでない間は、読み込んだ内容を出力して、次の1行を読み込む処理を繰り返す。

20行目でfclose関数を使ってファイルを閉じる。

参考)「C言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著) 翔泳社

コメント

タイトルとURLをコピーしました