1.1 表の科学

  3-1. 余談(プログラムで表を管理する場合)

大きなファイルで1つの表を記録したとします.
これを,身長順に並び替えます(ソーティングといいます).

この時,1つの表だとソーティングがしにくいことがあります.
なぜなら,表が大きすぎて一度に主記憶に呼び込めないことがあるからです.
主記憶に無いとディスクの中のファイルを直接並べ替えることになり,大変時間が掛かります.

それに対して,もしファイルが分割されていれば,ファイル構成としてランダムファイルというものを使います.
これはシーケンシャルファイルに対するファイルです.
シーケンシャルファイルは,普通のテキストファイルです.

・ランダムファイルとは
ランダムファイルとは,レコード番号(行のことをレコードといいます)があり,そしてレコード内容が記憶されています.
カードが何枚かあって,それの集まりのようなものです.
カードの塊なのでデックともいいます.カード1枚が固定長になっています.
レコード番号で管理しているので,途中から取り出すことができ,そこに記録があります.

レコード番号
レコード内容

デック固定(カードの塊)

1
 
2
 
3
 
4
 
5
 

それに対して
・シーケンシャルファイルとは
シーケンシャルファイルは途中から取り出すことが出来ません.
紙テープや磁気テープのようなものなので,頭から読んでいくことは出来ますが(レコード区切りという区切りで区切られている),番号が無いので途中からデータを探すのが大変です.

ハードディスクはランダムアクセスができるので普及しました.OSといったシステムを利用できるようになりました.
但し利用者にパソコン画面で見えるのは,通常シーケンシャルファイルです.

ランダムファイルについてもう少し見ていきましょう.
出身県だけをランダムファイル化します.
別にまた,身長だけをランダムファイル化します.
出身県
生徒No.
出身県
1
長野
2
静岡
3
岩手
4
大分
5
奈良
6
長野
7
富山
8
新潟
9
東京
10
宮崎
身長
生徒No.
身長(cm)
1
149
2
160
3
155
4
162
5
170
6
168
7
163
8
172
9
162
10
167

出身県ファイルはほおっておいて,身長ファイルをメモリに呼んできます.
そして,メモリの配列(array)に入れます.
もう1つ何番目かということを入れる配列も用意します.

身長
レコードNo.
a(1)=150
b(1)=1
a(2)=160
b(2)=2
a(3)=155
b(3)=3

そして aで配列の中身を入れ替えます.
同時にbも並び替えます.
そうするとどのようなことが起きるかというと,一番身長の高い生徒,つまり8番目の生徒が先頭に来ます.

a(1)=172
b(1)=8

出身県はといった場合,この8番目を出身県ファイルの8番目から抜き出してきます.
すると,一番身長の高い生徒は新潟出身であることがわかり,コンピュータの画面に表示できます.

つまり,テーブルを分けることによって,並び替えたい小さなテーブルだけをメモリに呼び込んで並び替えをし,
そして表示する時には,他のランダムファイルの得られた番目の内容を呼び出して表示します.
こうすると,早いプログラムを作ることが出来ます.

最近はRDB(リレーショナルデータベース)が普及してきたので,ファイル構成をどうしようかということをあまり意識しなくてもよくなってきました.