A−VXのファイル(前半)
- 1.A−VXのファイル
-
WindowsやLinuxからコンピュータの世界に入った人が、A−VXで最初に悩むことの1つがファイル形式についてではないでしょうか。
実はA−VXのファイル構造は、20年ぐらい前の一般的なコンピュータの普通のファイルの構造です。従って、そのくらいの頃書かれた古い「コンピュータのファイルについての解説本」を読めば、A−VXのファイル構造を理解することができます。最近のA−VXは昔ながらの「A−VX固有のファイル」の他にも、ファイル連携機能などを使えばWindowsのファイルやOracle、SQL Serverなどのオープン側のRDBも使えるようになっています。
おそらくWindowsやUNIXのようなファイル形式について私が改めてここで説明する必要はないでしょう。
そこでNECのオフコンの昔ながらのファイル形式について簡単に説明します。さらにファイルと言っても、磁気ディスク上のファイルや磁気テープ上のファイルなどいろいろあります。あまり範囲を広げても、話が難しくなるだけなので、磁気ディスクとフロッピーディスク上のファイルに的を絞ります。
もっと詳しく知りたい人は、古い「コンピュータのファイルについての解説本」か、A−VXの「データ管理説明書」を読みましょう。
- 2.A−VXのハードディスクとフロッピーディスク
たぶん、誰もが一度はA−VXのフロッピーディスクをWindowsで見ようとしたことでしょう。きっとWindowsからA−VXのファイルは見ることができなかったはずです。
これはWindowsとA−VXのファイル管理の方法が違うからです。A−VXの磁気ディスクやフロッピーディスクの中身をWindowsから普通の方法で見ることはできません。WindowsからA−VXのファイルを見るには、NECが提供しているツールや市販の変換ツールを使って見るしかありません。
逆にWindowsのファイルをA−VXから基本的には直接見ることもできません。今はA−VXの機能の1つであるファイル連携機能を使うことでWindowsのファイルにアクセスできますが、以前はやはり変換ツールなどでWindowsのファイルをA−VXのファイルに変換するしかありませんでした。
- 3.WindowsとA−VXのファイルの比較
-
WindowsとA−VXのファイル形式との最大の違いは、論理的なレコード長やフィールド長が固定のサイズなのか・可変のサイズなのどうかです。
Windowsのファイル形式が可変長、A−VXのファイル形式が固定長となります。
それではもう少し具体的に説明します。まずWindowsのファイル形式を考えてみます。 Windowsにはテキスト形式(***.txt)というファイルがあります。メモ帳等で開けばわかりますが、このファイルは1行が1文字だったり10文字だったりします。書こうと思えば千文字でも一万文字でも横に書き続けることができます。この1行がレコードに相当します。
Windowsのファイルの例 1
テキストファイル
A−VXのファイル
こんにちは。
今日もいい天気です。
以上
※終端コードは見えないので、見えるようにで代用
こんにちは。■■■■■■■■■
今日もいい天気です。■■■■■
■■■■■■■■■■■■■■■
以上■■■■■■■■■■■■■
※空白は見えないので、見えるように■で代用Windowsは1レコード(1行)の長さが可変です。レコードがどこまで続くのか判断できないため、レコードの一番最後に(目には見えない)レコード終端コード(CR=0x0D、あるいはCR+LF=0x0D0A)を付けることによって、1レコードの長さが判断できるようにしています。一部ではこのようなファイルのことを行順ファイルと言っているところもあるようです。
一方A−VXのファイル形式は固定長です。
1レコードの長さが20バイトとか60バイトとか125バイトなどファイル毎に決まっているので、レコード終端のコードは必要ありません。それぞれの利点欠点を挙げるとすれば、
- A−VXのファイル形式(固定長)はファイルを作る時に最初にレコード長を決める必要があります。ちょっと使うためだけでも事前の設定が必要でいろいろと面倒です。
- その点Windowsのファイル形式(可変長)は論理的なレコード長は可変長なので、ファイルを新規作成するときにレコード長が何バイトであるとかいろいろと面倒な設定する必要がありません。
- A−VXのファイル形式(固定長)の場合は、1レコードの長さが決まっているのでプログラムが一般的に簡単になります。このため処理速度も可変長と比べると高速になる傾向があります。(最近のコンピュータは処理速度もハードディスクのアクセスも非常に高速なのでほとんど見た目変わりませんが。)
- 一方Windowsのファイル形式(可変長)の場合は、1レコードの長さをチェックする処理を加えなければならないことがあります。プログラムが複雑になる可能性があり、処理が複雑になればその分だけ処理速度が遅くなる可能性もあります。
---------------
今度はWindowsのCSVファイルを考えてみます。
CSVファイルは1レコード(1行)上に複数のフィールドが並びます。このフィールドの長さは一般的には可変で、1文字や10文字などいろいろな長さがあり、これらフィールド間はカンマ(,)やタブなどで区切られています。またフィールド間の区切り文字をフィールド内に使用する場合は、(”)などでフィールドを囲むなどの工夫が必要になります。Windowsのファイルの例 2
CSVファイル
A−VXのファイル
○○○×××商店,北海道札幌市・・・,111
凸凹商事,東京都新宿区・・・,222
AA株式会社,大阪府大阪市・・・,333
※終端コードをで代用
○○○×××商店■■北海道札幌市・・・■■■■111
凸凹商事■■■■■■神奈川県横浜市・・・■■■222
AA株式会社■■■■大阪府大阪市・・・■■■■333
※空白を■で代用A−VXのファイル形式のフィールドの長さも固定長です。例えば” 顧客名”のフィールドは50バイト、”金額”フィールドは10バイト・・というように決めなければなりません。その代わりフィールド間の区切りコードは必要ありません。
それぞれの特徴を挙げると、
- Windowsのファイル形式は可変長なので、例えば顧客の名前が1文字であろうと100文字であろうと何ら不都合がありません。
- A−VXのファイル形式はフィールドの長さが決まっているので、もし”顧客名”のフィールド長が30文字分しかなければ、100文字の長さの顧客の名前は30文字分しか入れることができません。一方1文字しかない顧客がいれば、残りの29文字分は空白文字で埋めることになります。最初の設計時のフィールド長が不適切であれば、全ての文字が入らなかったり、逆に空白やゼロばかりのファイルになって容量が無駄になるということになってしまいます。
- フィールドが可変長だと、例えばカンマ区切りのCSVファイルであれば、目的のフィールドを探すのにカンマの数を数えたり、フィールドの長さを数えたりといった処理が必要となります。
- 一方固定長であれば、あるフィールドの先頭位置と長さが決まっているので、数えたり探したりといった処理が不要になり、ダイレクトに「50バイト目から10バイト分をコピー」といったようにできるため処理が簡単になります。一般的にはアルゴリズムが単純であればその方が高速に処理ができるので、固定長の方が処理速度という点では有利であると考えることができます。
---------------
A−VXのデータベースも固定長です。Windowsのデータベースは一般的にvcharなどの可変長のデータ型がありますが、A−VXのデータベースにはありません。
NECのオフコンが採用しているファイル形式は、1960年代から1990年代ぐらいまでの間、IBMやNEC、富士通、日立、東芝といったどのコンピュータメーカーでも採用していたコンピュータ界で標準的なファイル形式でした。
一方現在ではWindowsやUNIXのファイルが標準的なファイル形式となっています。
なぜIBMのファイル形式を採用しているのかというと、もともとNECのオフコンを設計した1970年代は、IBMのコンピュータが全盛時代で、当時のコンピュータのほとんどがIBMのファイル形式を採用していたからです。そのために異種コンピュータ間のデータ交換を行うためには、フロッピーディスクにしてもテープにしてもIBMのファイル形式でなければならなかったのです。
今もしWindowsのファイル形式を扱えないようなOSがあったとしたら、コンピュータ間でデータを交換するのが非常に困難であることと同じです。(ただ、ファイルの内部構造は、汎用コンピュータ系のファイルの内部構造よりも簡易型となっているようです。)
当然ながら今のNECのオフコンのOSはWindowsのファイル形式も扱えるようになっています。
最近のA−VX01形式のフロッピーディスクだとWindowsでアクセス可能ですが、それでもpafdu000という名前の大きなファイルが1個あるだけで、A−VXのファイルの中身を見ることはできません。