2007年8月18日土曜日

第33回目 マクロを何を使って作るのか(その3;テキストエディタのマクロ)

○第33回目 マクロを何を使って作るのか(その3;テキストエディタのマクロ)

 いままでに作成したQXエディタでのマクロを紹介します。
 少しでも、マクロの組めるテキストエディタが重要なのかをわかってもらいたいからです。

【作成したQXエディタでのマクロ】
 1. 文字列から表の作成
 2. 表を文字列に戻す。
 3. 法律の条文から、見出しと条文番号のみを抜き出す。
 4. 法律の新旧対照表から新の条文だけを抜き出す。(一太郎の文書から)
 5. 漢数字をアラビア数字にする
 6. 全文を別の文書にコピーする。
 7. 語尾にそれまでの文字列をコピーする。
 8. 直前の行の一部をコピーする
 9. 指定された行数の分をコピー。マイナスも可。
 10. 指定された行数の行を逆転する。
 11. 文末にタブを入れる
 12. 選択範囲の任意文字数目に、設定した文字を挿入する。
 13. 空行、空白行の削除
 14. 削除する行数を入れて、その行数を削除する。
 15. 選択範囲の指定した桁数目に、連続する数値列を挿入する。
 16. 数値にカンマを挿入(複数行可能)
 17. 範囲内の複数語の置換え
 18. 選択範囲の行頭に、'''を挿入する。
 19. 選択範囲の'''を削除する。
 20. マクロの中から定数(特別な記号から始まる)を抜き出しまとめる。
 21. エクセルマクロファイルの結合。
 22. QXマクロファイルの結合。
 23. ファイルの履歴取得数拡大。ファイルは400個まで累積する。
 24. ファイルのパス名からジャンプ及びそれ以外のことをする

 1. 文字列から表の作成
 2. 表を文字列に戻す。
=⇒テキストエディタは、表作成に弱いです。そこで表作成を簡単にしようというものです。
 具体的には、データとして次のように与え、下のような表を作るというものです。

2 6 10 15   =⇒これは、たて見出しを除いた項目数とそれぞれの列の幅を意味します。主項目は2つ、列の幅は順に、6桁、10桁、15桁ということです。
 年  月   事  項     適  用
2006.12  定期点検 ガス及び電気
2007. 1  親睦行事 会社のレクレーション大会
※項目の間はtab

┏━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃・年・・月・┃ ・・ 事・・項・・・┃・・・・適・・用・・・・・・・┃
┣━━━━━━╋━━━━━━━━━━╋━━━━━━━━━━━━━━━┫
┃2006.11・・┃・定期点検・・・・・┃ガス及び電気・・・・・・・・・┃
┣━━━━━━╋━━━━━━━━━━╋━━━━━━━━━━━━━━━┫
┃2006.12・・┃・親睦行事・・・・・┃会社のレクレーション大会・・・┃
┗━━━━━━┻━━━━━━━━━━┻━━━━━━━━━━━━━━━┛
 (注)ブログでの表示がうまく出来ませんので、スペースの代わりに・にしています。
   それでもだめですね。実際は表は崩れませんので、ご了解を。

 なお、データの与え方はエクセルでのものと同じにしていますので、エクセルでデータを作って、テキストに貼り付けてというやり方が可能です。通常はこのやり方で表を作ります。
 エクセルで作っているのだから、テキストエディタで作る必要がないのではという、こともいえますが、資料の一貫性という観点からエクセルとの間でやり取りをしています。
 2.のマクロは、表をデータに戻すものです。何で必要なのかというと、表での文字、数値の配置が思うように行かない時、表を直接直して、それをデータにとるというものです。横見出し以外は表が崩れてもかまいません。自動的に補正します。

 3. 法律の条文から、見出しと条文番号のみを抜き出す。
 4. 法律の新旧対照表から新の条文だけを抜き出す。(一太郎の文書から)
=⇒これは条文の整理・管理のためのものです。
 今は条文は改正案の段階から磁気媒体化されています。それを簡単に利用可能な形式にしようと思って作ったものです。
 新旧の新の部分だけを取り出すということをしています。一太郎の中では簡単に新旧の分離は出来るのかもしれません。(一太郎は、フリーの一太郎ビューワしか持っていません)
 特殊な条件で新と旧を切り分けていますので、100%は正しく抜き出せません。特に表がある条文は駄目です。
 3.はそのような条文から目次モドキをつくろうというものです。
 新の条文だけに必要性が高いのです。だが、見出しのない条文もありますので、これもなかなか100%の結果にはなりません。

 5.漢数字をアラビア数字にする
=⇒条文上の漢数字をアラビア数字にするものです。これはフリーの『複数文字列一括置換マクロ』を活用したものです。ですから、変換対応表を工夫して作りました。九百九十九条まで可能です。百条、百二条、百二十条、ニ百条をどのような手順で変換しますか。
 頭の体操には面白いです。

 6. 全文を別の文書にコピーする。
=⇒付け加える文章は完成度が低いため色々と修正が必要となります。その部分だけの文書ファイルを作って、完成したらもとの文章に付け加えるという目的で作ったものです。
 テキスト内での場所の移動が楽なことから、それだけ更新操作時間の節約になります。また、もとの文章の指定した場所にコピーするという処理に単純化されてマクロも単純になりました。
 このマクロは短いものなので内容をちょっと見てみましょう。
 ほとんど解説を必要としませんね。
 このプログラムは変数を使わないので、イメージとしては不十分ですね。変数使いはエクセルマクロとそれほど変わりません。

proc main() '=⇒始め
'全文を別の文書にコピーする。  =⇒コメント行
'直前に表示されていたウインドのカーソルのあるところにコピーされる
'起動は2タッチとする
if @hwnd = 0 then exit proc '=⇒始めるときのおまじない
@BlockSelectAll '=⇒全文選択
@BlockClipboardCopy '=⇒クリップボードにコピー
@WindowChange '=⇒別ファイル(直前に処理していたファイル)に変える
@BlockPaste  '=⇒ 貼り付け
end proc  '=⇒終了
※注、QXマクロは、ある前提のもとになっているので、上のものを単純に貼り付けても駄目です。全角スペースを半角に修正する必要があります。よくこれで動かないどうしてだろうと思い悩むことがあります。

 7. 語尾にそれまでの文字列をコピーする。
=⇒同じような文言の繰り返しがある場合、これをコピーし、修正しようという考えです。

 8. 直前の行の一部をコピーする
=⇒これも、よくある例ですが、一行前の文章の後半と同じなので、コピーしたい、という目的です。以下、上と同文ですというような時でしょうか。

 ここらで一休み。

0 件のコメント: