2 ファイルとは何か

2.1 ファイル

実際のプログラムでは,大量のデータを扱うことが多い.大量のデータは,ハードディス クに保存したり,ハードディスクから読み込んだりする.なぜならば,処理の結果をディ スプレイに打ち出しても,書き写すことは不可能であるからである.また,大量のデータ をキーボードを使って入力することもできないからである.現代社会での大量の情報は全 てハードディスクに保存されている! このようなことから,ハードディスクを使ったデー タ処理の方法を理解しないと,実用的なプログラムは書けない.このハードディスクとの データの受渡しをファイル処理2と言う.

ハードディスクに保存しているデータの集まりの単位のことをファイル3と言う.これは0と1のビットの 集まりで,かなり複雑なことをしてハードディスクに書き込まれている.OS--linuxや Windows--がきちんと管理しているので,プログラマーは簡単に使えるようになっている.

ファイルは,図1にしめすような巻物と思ってほしい.この巻物は便 利で,消去することができ,幅や長さはプログラマーが自由に変えることができる.ここ では,この巻物にC言語の命令を使って,読んだり/書いたりする方法を学習する.

図 1: ファイルのイメージ.ファイルは巻物に似ている.巻物の本文はシェークス ピアの「ハムレット」より.
\includegraphics[keepaspectratio, scale=0.9]{figure/file_image.eps}

2.2 ファイル処理の体験

2.2.1 ファイル出力

ごちゃごちゃと説明するよりも,実際にファイル処理のプログラムを示した方がわかりや すいだろう.いままで,ディスプレイに出力していた"Hello World !!"をファイルに書き 出す(リスト1).ディスプレイに表示するprintf()という関数の代 わりに,fprintf()関数を使うのである.この関数により,ファイルに文字を書 き出すことができる.ただし,この間数を使うために,前後に少し,おまけ(4,6,10行目)がつく.
   1 #include <stdio.h>
   2 
   3 int main(void){
   4   FILE *hoge;
   5 
   6   hoge=fopen("hello.txt","w");
   7 
   8   fprintf(hoge,"Hello World !!\n");
   9 
  10   fclose(hoge);
  11 
  12   return 0;
  13 }
\fbox{実行結果}

リスト1を実行すると,hello.txtというファイルができあがる.そ のファイルの中には,以下のような文字が書かれている.

Hello World !!

このプログラムの各行の内容は,次の通りである.文法の詳細については,後で説明する. ここでは,fprintf()でファイルに文字を書くことができることを理解せねばならない.

2.2.2 ファイル入力

ファイルに文字を書く方法は分かった.次に,ファイルから文字を読み込んでみよう.先 ほど作成したファイル(hello.txt)の内容を読み,それを画面に出力する.リスト 2が,ファイルを読み込んで表示するプログラムである.
   1 #include <stdio.h>
   2 
   3 int main(void){
   4   FILE *fuga;
   5   char a[32], b[32], c[32];
   6 
   7   fuga = fopen("hello.txt", "r");
   8 
   9   fscanf(fuga, "%s%s%s", a, b, c);
  10 
  11   fclose(fuga);
  12 
  13   printf("%s %s %s\n", a, b, c);
  14 
  15   return 0;
  16 }
\fbox{実行結果}

このプログラムを実行すると,hello.txtというファイルから文字を読み込み,ディ スプレイに,以下のように表示される.

Hello World !!

このプログラムの各行の内容は,次の通りである.ここでの文法の詳細についても後で説明する. ただ,fscanf()でファイルから文字を読み取ることができる--ことのみ理解してお けばよい.




ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年4月30日


no counter