変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

2013年10月22日

レポートライター

所定のデータを差し込んでPDFやHTMLファイルを作成するツール。
ワードやEXCELの文書ファイルを作れるものもあるし、テキストファイルに出すものもある。
テキストファイルに出せるならCSVファイルにも当然出すことができるが、レイアウト画面を延々とカンマで埋める作業になるだろう。
ここまで来るとテキストファイル変換ツールといっていいだろう。
こんなフォーマットテキストと
“{name},{zip},{address1},{address2},{address3},{tel1},{tel2}\r\n”;
List<xxxBean>のデータを添えてやるとListの要素分、行を出力させるのは、そう難しくない。
xxxBeanから任意の名前のgettorを手早く呼び出す方法を思い出す方がメンドクサイくらいだ。
ちょっとフォーマットを変えて
“<xml><name>{name}</name>\
<zip>{zip}</zip><address1>{address1}</address1>\
<address2>{address2}</address2><address3>{address3}</address3>\
<tel1>{tel1}</tel1><tel1>{tel2}</tel2>\
</xml>”;
にするとXMLファイル出力の出来上がり。
できれば、{zip}を{zip format:000-0000}などどフォーマット指定ができるとうれしい。
yyyy-MM-dd HH:mm:ss.SSS なんかもできるといいだろう。
そうなると”で括った方が安心とか、
現在日時を楽に出したいとかあって、
{@systemDate, format:”yyyy-MM-dd HH:mm:ss.SSS”}
とかに、なるんだろうな。
 
ひとつ作っておくと便利そうだ。
そう、自分で作っておけば勝手に拡張できるからね。(笑
jndi指定でデータベースからデータを引っ張りだすとか、
EXCELシートから
とか後付けできるかもしれないからね。
 
 
これで年賀状の宛名書きは万全・・・のハズ。



スクリプト

早い話が呪文(spell)のことである。

alert(“ひゃっほーい!”);

と書くと

「ひゃっほーい!」(OK)

とメッセージが飛び出る。
何やら難しそうだが、実装は単純。

1.まず、ダブルクォートでサクっと文字を分割。偶数番目の文字の前後はダブルクォートでくくる。

  • alert(
  • “ひゃほーい!”
  • );

2.これを記号で更に分割

  • alert
  • (
  • “ひゃほーい!”
  • )
  • ;

3.適当な語句分析ルーチンに流して、分割した文字列に意味を持たせる。

  • 名前:alert、左括弧(、リテラル:ひゃほーい!、右括弧)、セミコロン;

4.適当な文法解析ルーチンに流して、意味付けをする。

  • 関数名:alert、引数1:”ひゃほーい!”、以上;

5.ここまで来れば、後は

  • alert関数に”ひゃほーい!”を渡して、何かするのを期待するだけ。

と至って簡単である。
最初にダブルクォートで括るのはこれはプログラミングの定説とか信仰とは無関係である。なぜなら「ひゃほーい!」の部分にはダブルクォート以外なら大抵の文字が入ってよいので、文法上は「悪質なスクリプト」を書いても文法上は合法である。そんなもんを書かれるとプログラムはウッカリどころか真面目に解析してしまい厄介なことに明白で最初にそのようなケースをバッサリと除外しない奴は頭がイカれている。
一般には処理を分岐するif文とかloop文やwhile文もあるが、要は「適当な文法解析ルーチン」を作って、「xxx関数にyyyを渡して何かするのを期待する」だけなので何も難しくない。
ただ、String[100]  text;と書くような文法は、JNIなどの外部インタフェースには欲しいが、バッファーオーバーランに出会うとひどい目に遭うのは間違いないので、そのようなバッファは他とは区別し共有メモリ(DNZエリア)に配置するのがよい。外部インタフェースの仕組みは言語やOSさらに32ビット版かか64ビット版かによって、ずいぶんと異なる仕来りでデータを配置しなければいけないので、OSのコンパイラーの構造体の仕様書やEXPORTSインタフェースの仕様を熟読する必要が、仕組みさえ理解すればメモリに仕様通りにデータを並べていくだけ。パラメータが複雑な構造体でも応用できるようにちゃんと組んでしまえば、面倒なバイナリーなダンプ・データを作成の便利なツールにもなる。
色々あるが、これらを都合のいいように、組み合わせれば、大抵のスクリプトのモックアップは完成する。
後は、呪文を組み合わせると、やはり可笑しなことが起こる。
一般通念としては、こうなるハズ!とか、常識的に考えればこうだろう!とかは大抵外れる様にできている。
例えば、AKB48(”xxxxx”);と呪文を唱えたら、どうなるか?
そう、AKB48関数をコードしないと、「知らない関数(AKB48)です」と表示することもせず、ただcoreファイルを吐き出すだけだろう。
スクリプトの難しいところは、

  1. いかにミスをしないように記述できるか
  2. 多少のミスなら無視して処理できるか
  3. ミスを犯した場合に適切なガイドメッセージを表示できるか

など、不注意に対してドレだけ寛容であるかが、使い心地に大きな影響を及ぼす。
だから、1文字間でも違えたらHDDがクラッシュするのは仕様ですなんて論外である。
 
以上。
 




top