はじめての C

(続き)

さて、3つの 数値を 扱うための コードだと、次のように 表します。

  fprintf(pointer, "%d %f %d\n", var1 var2 var3);

ここでは、1つの int、1つの float、もう 1つの int を、ファイルを 指す ポインタに 続けて 取っています。 大事なのは、数値を 空白の 文字で 離してある ことです - でないと、数値を 読み返すときに それが 区別できないからです。

読み込みを 行うには、次の 行のように 使ってください。

  fscanf(pointer, "%d %f %d", &var1, &var2, &var3);

fscanf() は、必要なら、実際に 整数値を 1つ 返し、それは データを うまく 読み込んだときの 数値と 一致します。

上の 例では、3 という データ数が 戻ります。 もし 読み込みの ときに 問題が 起きると、fscanf() は 3 より 小さな 値を 戻します。

この方法を 使うときの コマンドの 書式は、次に 見るように なります。

  int n;
n = fscanf(pointer, "%d, %f", &var1, &var2);

データを 読む際には、ファイルの 終わりまで 届いたか どうかを チェックできるように することが 重要です。 そして、そのための 関数 feof() が 用意されています。

それは ファイルの 終わりに 届いたときは 0 以外の、また そうでない 場合には 0 の 値を 返します。

以下の コード断片では、ポイント先の、配列を 使って 保存している ファイルから、整数の 列 (line) を 読んでいます。

このループは、プログラムが ファイルの 終わりを 見つけるまで 続きます。

  int loop = 0;

while (feof(handle) == 0)
{
fscanf(handle, "%d", &(array[loop]);
loop++;
}

今まで 実行した ファイルの 取扱いは その 順序通りの もので (sequential) あって、ファイルを 使っている ときには ジャンプさせる ことは できませんでした。

しかし、C には ランダムアクセス (random access) のための 機能が 用意されていて、使っている ファイルが 十分に 大きく、メモリ上で 一度に その全部を 扱う 余裕のない 場合には、 特に 役に たちます。

次回は、そのことを 調べて、メモリ上の 手強い データを 扱う いくつかの 進んだ 方法に 触れてみましょう。

で、こちらに 続くわけです。
http://d.hatena.ne.jp/sekiyo/20060502