テキスト整形アプリの開発…
約1ヵ月の間、ヘルプで週3回のテキスト整形処理のお仕事を手伝っておりました。3回のテキストはそれぞれに似ているようで内容が異なっており、手作業だとかなり面倒です。ですのでお得意のテキスト整形処理アプリをWindowsで動作するインタプリタ型プログラム言語「HSP(Hot Soup Processor)」にて開発することにしました。その記録です。
まずは1つ目のテキストアプリ開発について。こちらは3月初めに開発したのだけれど「よし!つくる!」と思い立って半日で完成しました(笑)。なぜならば、とりあえず今は自分しか使わないのでGUIが不要。エラーチェックもバグ回避も何もせず、ただ単にダーッと書いたいわばプログラムと言うより単なるバッチ処理のファイルだからです(笑)。
このアプリでは起動するとファイル選択ダイアログが出るので、任意のテキストファイルを選択。すると中身をロードし整形。具体的にはタブを取ったり数字を○付き数字にしたり、名前をカギかっこでくくったりなどの処理を行い、テキストをコピーできるように表示して処理終了…そんな感じのアプリになりました。うん、やはりバッチ処理ですね(笑)。とは言え、自作の文字処理モジュール「kurage_mod」(http://tohazugatari.com/kurage_mod)がなければ簡単にはいかなかったはずです。うーん激しく自画自賛ですが、かゆいところに手がとどくモジュールだなぁ。あ、自分のために自分で作ったので便利なのは当たり前ですがっ(笑)。
さて話を戻して…。速攻で完成したアプリですが…処理せねばならないのは取り引き先から送られてくるテキストのため微妙に中身が異なる場合がありまして。ここから先、精度の高いアプリを作るには、いささか送信されたデータが不足していたんですよね。なのでデータをもっと集めるか精度が高まるよう作り直すかしなければならなさそうです。
もう1つのテキストファイルの処理は、こちらはプログラムで書き出されたテキストの整形なので、とてもラク。だから後回しです(笑)。また、もうひとつはFAXで送られてくるのを手打ちしなければならないので、こちらは処理不要ですね。
ということで、処理する必要があるのは2種類のテキストファイル。2つのアプリケーションを作って使い分けても良いのだけれど、自分以外の人が使うとなれば…できるだけ簡単に扱えるようにしたくなるじゃないですか。今回のアプリは後でT女史に使ってもらうものなので、できるだけ簡単に動作するほうがいい。さらに言えば、処理するテキストファイルを選択ダイアログで選ぶのではなく、ドラッグ&ドロップで動作し自動でどちらのテキストファイルの整形処理を行うのか判断するアプリケーションがよいですね。
いざ開発…。まずはドラッグ&ドロップの処理からです。こちらは以前使っていた外部プラグインを使わないようにしているため「llmod3」を利用します。ドラッグ&ドロップの処理はとても簡単でした。まずは「#include」命令で「llmod3」の本体である「llmod3.hsp」と、ドラッグ&ドロップを実現するためのモジュール「dragdrop.hsp」を呼び出します。
次にドラッグ&ドロップされたファイル名を格納する変数とファイル数を格納する変数を用意。後は「dd_accept」を書くだけ。この命令はパラメーターを3つ持っており、書式は「dd_accept p1,p2,p3」です。p1にはファイル名を格納する変数、p2にはファイル数を格納する変数、p3には対象となるWIN_IDを入れます。p3は省略するとデフォルトのID=0が選ばれます。ただしID=1は選択できません。
ドラッグ&ドロップのチェックは、「goto」命令でループを作り出し、ファイル数を格納する変数の変化を調べることで実現しています。私の例を挙げるとこんな感じになっています。
#include "llmod3\\llmod3.hsp" #include "llmod3\\dragdrop.hsp" //ドラッグ&ドロップのため DRAG_TMP="" ;ドラッグ&ドロップされたファイル名を入れる変数 KAZU=0 ;ドラッグ&ドロップされたファイル数を入れる変数 //ドラッグ&ドロップ命令(p1=ファイル名、p2=ファイル数、p3=対象WIN_ID) dd_accept DRAG_TMP,KAZU,0 *DRAG_WAIT wait 1 if KAZU!0 { //ドラッグ&ドロップされたら以下 の処理 } goto *DRAG_WAIT
まずは面倒なほうの整形処理から始めております。結局、精度を高めるために当初の概念を捨て去り、最初から書き直すことにしました。固定観念を持つと進歩しないです。できるだけ柔軟な姿勢を保つことが大切ですからね。今回のアプリはテストも含め週末までに完成させるつもりです。