第14回 プログラミングの舞台裏「2.PDBファイルのデータ構造〜Ver.0.1」
|
|
14−2.PDBファイルのデータ構造〜Ver.0.1
データ構造、と言っても、パソコン側からPDBファイルを作るところまでは、何とかこぎつけました。したがって、ここではプログラム内で扱うデータを「格納する形」についての説明になります。 エクセルのデータ、と言えば、大抵の方がこんな縦横のセルをイメージされるんじゃないでしょうか? ![]() この縦、横のイメージから連想されるのは、2次元の配列変数になるでしょう。 ![]() NS Basicでは、データベースへのデータの読み書きに直接配列変数を指定することが出来ます。 Dim DtSheet(10,10) as Single Dim Db as Database Dim res as Integer res=DbOpen(Db,"TESTDB",0) res=DbGet(Db,DtSheet) res=DbClose(Db)このサンプルコードのように、複数のデータを持った配列変数でも、読み込み動作は1回で済むので、プログラムは簡単に出来ます。 しかし、配列変数は、予め、縦と横の要素数を「固定」の値として宣言する必要があるので、指定したサイズ以外のデータは読み込めないことになります。 つまり、用意した配列変数より、大きくても小さくても読み込めない、ということです。 例えば、上の例の配列変数DtSheet()は、10行10列のデータしか読み込めないことになります。 だからといって、あまり大きな行・列のデータを用意しておくのも無駄です。 現行バージョンのNS Basicでは動的に配列変数を用意できないので、これ以上は仕方がありません。別の方法を検討することにしました。 CSVといえば、カンマで各要素を区切ったテキストファイルですが、こういうものを簡単に分解する関数がありました。 Visual BASICで言うところの、Split()関数ですが、これに類似するのが、NSBSystemLibというライブラリに収められていました。 DelimitedItem()この関数は、特定の分割文字で分割されたn番目の文字列を返すもので、この関数を使えば、それほど悩まなくても、特定の位置からの要素を取り出すことが出来ます。(参照:Basic BASICの第12回の3) つまり、各行のデータをカンマを含んだまま1つの文字列として、次のようにデータベースに保存しておきます。 そうすれば、行と列を指定するだけで、必要なデータが取り出せるわけです。 ![]() ビューア側は、この構造をもったデータベースから、1行ずつ取り出して、各列ごとのデータに分解するだけです。 分解したデータを、それぞれ配列変数に順に代入すれば、表示データとして使うことが出来ます。 また、この方法だと、パソコン側のコンバータも、行単位でデータを容易すればよくなりますから、比較的簡単な構造になります。 このように、プログラミングする側が「有利」になるようなデータ構造を考えるのは、後々の作業に響きますから、結構重要です。 一応、様々な手法が存在するようですが、結局のところ、このような小さなアプリでは、経験がモノを言うようです。 そして、最初のバージョンVer.0.1がリリースされました。 |
第14回 プログラミングの舞台裏「2.PDBファイルのデータ構造〜Ver.0.1」
|