|
直積 とか 外部結合 を作るですから、DB を使うのが
適合しています、条件で何とかするような 「問題の拡張」にも
対応できますから。
(データ処理を テキストで操作するのに深入りしない事
これは、歴史の教訓、ある程度までできるが、それ以上は
困難さが急激に上がります
→ 最初から DBで 組み立てれば良かったと後悔します)
(最近の(メール・文書・バージョン管理)システムは内部でDBを使います。昔は
独自保存形式で管理するのが、一般的でした が)
秀丸マクロでするには、一般の プログラム言語の 発想から
エディター操作の発想に転換できるかが キー です。
a,b,c の3つのカーソル(イタレータ)を 回すのが、
わかりやすいでしょう。
1.カーソル初期化
2.3結合
3.カーソルを進める、2から繰り返し
以上、おおかたの 処理イメージ
----------
gofiletop;
searchdown "table_a_start";#cursorAini=lineno;
searchdown "table_a_end"; #cursorAend=lineno-1;
searchdown "table_b_start";#cursorBini=lineno;
searchdown "table_b_end"; #cursorBend=lineno-1;
searchdown "table_n_start";#cursorCini=lineno;
searchdown "table_n_end"; #cursorCend=lineno-1;
#cursorA = #cursorAini;
while(#cursorA < #cursorAend)
{#cursorA = #cursorA+1;
movetolineno 1,#cursorA ; beginsel; golineend2;
$A=gettext2( seltopcolumn, seltoplineno, selendcolumn, selendlineno, 0);
//menu $A;
#cursorB = #cursorBini;
while(#cursorB < #cursorBend)
{#cursorB = #cursorB+1;
movetolineno 1,#cursorB ; beginsel; golineend2;
$B=$A+gettext2( seltopcolumn, seltoplineno, selendcolumn, selendlineno, 0);
//menu $B;
#cursorC = #cursorCini;
while(#cursorC < #cursorCend)
{#cursorC = #cursorC+1;
movetolineno 1,#cursorC ; beginsel; golineend2;
$C=$B+gettext2( seltopcolumn, seltoplineno, selendcolumn, selendlineno, 0);
//menu $C;
gofileend;
insert $C;
insertreturn;
}}}
---------------
スクリプトの 簡潔さを知った後では
こんな めんどう(細かいところに 気を使う)のを
書く 人はいないと 思う。(しかも 分野に独自で展開がきかない)
それが技術進歩というもの。
APL言語とか J言語 なら 「 AxbxC 」 とか式で書けるのもあります。
結論: 道具を不得意な分野に使うにしても、無理するな。
無理すると イタイ目にあいます。
|
|