ファイルを扱う時には、アクセスモードというのを指定します。読み出しモード、書き込みモードというのもそうなのですが、もう1つ重要なモード群があります。今回はそれについて話します。
では、今回の要点です。
では、いってみましょう。
みなさんはファイルの中にはどんなデータが入っていると思いますか? 今までの講座を見ていれば、文字も数値データとして扱われることを知っていると思います。つまり、テキストファイルも、そうでないファイルも、1バイトデータの羅列にすぎないのでは、と思うことでしょう。それはまさに正解です。このことにおいて特別なファイルは1つもありません。
これが先ずはじめに頭に入れておくことです。でも、これだけだと別にメモリとなんら変わりないことですよね。そうです。ファイルの中のデータ構造は、メモリと特に何ら変わらないのです。もちろん、ファイルとメモリは全く別のものですが(第31章を参照)、データ構造については何ら変わりはありません。
このデータをそのまま読み出すモードがバイナリモードです。ごく普通の動作ですよね。
しかし、これだけでは不便なことがあります。Windows、Mac、UNIXなどで文字コードが違うのは第22章の中の用語集でちょっと触れたと思います。このうち、「あ」や「何」などのような全角文字の扱いについては大体共通しているので問題ありませんが、改行コードについてはそうはいきません。
改行コードは、ずばり改行を表す文字コードです。ファイル上での改行コードは、Windowsでは \r\n 、Macでは \r 、UNIXでは \n と、大きく異なります。プログラムを各環境で共通して扱うのにも不便ですし、Windowsの改行コードは2バイトなので改行かどうかの判定が少々面倒です。改行はよく使うものなので、これを便利に扱えると非常に助かります。
そこで、改行コードを自動的に読み替えてくれるモードがあります。それがテキストモードです。「テキスト」モードと、テキストであることをやけに強調した名前になっていますが、やっていることは改行コードの読み替えだけです。それ以外はバイナリモードと何ら変わりがありません。
読み出すときには、改行は \n として読み出されます。書き込むときには、\n は元の改行コードに変換して書き込まれます(メモリ上のデータは変えられません)。書き込むときの改行コードはOSによって変わります。
重ねて言いますが、テキストモードとバイナリモードの違いはここだけです。これは非常に重要です。しっかり理解しておいて下さい。
あと、ファイルのデータ自体にバイナリ、テキストの区別があるわけではありません。あくまで、ファイルを読み出す、または書き込む時にデータを変換するだけです。くどいようですが、初心者の中にはここを誤解されている人がかなりいます。しっかり理解しておいて下さい。
テキストファイル、バイナリファイルという言葉を聞いたことがあるかもしれません。これはどういうことか、と思う人もいるでしょう。しかし、これはファイルが「テキスト」つまり、文字コードのみできちんと形成されているかどうかを表しているだけのことです。ここでいうバイナリ、テキストとはちょっと毛色の違う定義です。これらの定義は別物です。混乱しないように注意しましょう。
最後に、アクセスフラグについての補足で終わります。
ファイルを開くときのフラグに b を追加指定するとバイナリモードになります。そして、何も指定しないとテキストモードになります。バイナリモードで使おうとしているのに、うっかり b を指定し忘れるというバグは結構あります。気を付けましょう。
今回も短かったですが、内容は非常に濃いです。どこが重要なのか分からないくらい赤い字が出てきました(笑)。しかし、全てが重要です。このことはきっと役に立つと思いますので、しっかり理解しておいて下さい(くどい?)。
それでは、くどいかもしれませんが、要点を。
では、次回からはもうちょっと突っ込んでファイル操作を行ってみたいと思います。では。
第52章 ファイルのススメ2 | 第54章 ファイルのススメ3
Last update was done on 2000.7.4
この講座の著作権はロベールが保有しています