データベースからのテキスト書きだし

データベースの内容をテキスト書き出しするプログラムを作るため、書き出すフォーマットが伝えられた・・・って、「CSVなんだから項目数が不定になる部分*1を途中においては駄目だ」といっているのに、やっぱり途中にくるようになっている。


とりあえずその部分を最後に持ってくればもう少し綺麗になるのだが。*2


XMLみたいに各項目が自分自身がなんであるかを説明している*3ようなものならともかく、CSVでそんなものを作ると見にくくて仕方がない。一応、最大のかずになるものにあわせて少ないところでは空データを入れてつじつまを合わせ最初の行にラベルを入れれば意味は分かると考えているらしいのだが、CSVのラベルというのは単なる一つ目のデータであってそれ以上の意味はない…。例えばこのデータをプログラムで処理するのに使うとして、一行目のデータを読んで「人間用に書かれたラベル」を判定して各行の内容を推定しなければならなくなるのだが。しかも、そのラベルが正しいかどうかの信頼性はかなり低い。*4


繰り返し項目の最大数は99と制限されているはず*5ので、いっそ99個に固定すればデータ型として適切か(笑)。そこまですると単なる嫌がらせのような気がするが。*6

*1:元データベースがリレーションでつながれた複数テーブルからなり、1対多になっている箇所がある

*2:本当はもう一つ個数が不定なものがあるのだが、そちらは最大10個なので最初から10個並べてしまえばしのげる。もう片方は後述するように百個くらい許されるので並べるのはちょっと(笑)

*3:タグで括るので、タグ名でデータの内容がなんであるか分かる

*4:データを生成する箇所とラベルを生成する箇所が必然的に離れる。そしてデータの状態とは全く関係なくラベルを編集できる。XMLだと個別のデータのタグを変更することになるので不可能。ついでに、スキーマがあればデータの型チェックも可能。

*5:データベースの定義ではなくデータを使うアプリケーション側の制限なので、確実ではないけど。SQLで「あるデータを参照(reference)するデータの個数を制限」するなんて器用なことができるのだろうか。手続き文を書いてinsert,updateのタイミングでチェックすれば何とか可能か?いや、それって既にSQL対応データベースの個別の実装の問題になっているか。

*6:ちなみに繰り返すデータの項目は複数あるのでエクセルだとZZ列までに収まるかどうか微妙(笑)。と思って調べてみると、手元のエクセルは256列までになっていた。意外と根性がない。最新のもの(2007)は16384列。何故か65536(16bit)の4分の1(14bit)。一行に付き管理するべきものが4つぐらいあるのか?それと、後ろの方では列名はどうなるのか(笑)。1-2-3式に両方数字にするのか?ちなみに行数は65536の16倍(20bit)。行と列のデータをあわせると34bitなので、それぞれ独立で管理していると思われる。従って列数の制限は32bitの限界とかではなさそうだ。