弐条海月の とはずがたり

そこはかとなく書き綴るブログなるもの

HSP用文字処理モジュール「kurage_mod」の解説完成

Windowsで動作するインタプリタ型プログラム言語「HSP(Hot Soup Processor)」でのプログラム開発に役立つ、文字処理に特化した自作モジュール「kurage_mod」の解説がようやく完成しました。解説をアップしていなかった18の命令を一気に更新していますよ(笑)。

解説を追加した命令は「K_AFTER_GET」「K_BEFORE_GET」「K_BETWEEN_DEL」「K_BETWEEN_GET」「K_CHK_DIR」「K_CHK_GYO」「K_DEL_CR」「K_DEL_GYO」「K_DEL_LF」「K_EI_HAN」「K_EI_ZEN」「K_FOOT_DEL」「K_HEAD_DEL」「K_NUM_ZEN」「K_NUM_HAN」「K_REP_S」「K_REP」「K_XML_ADD」です。下書きはできていたのだけれど、まとまった時間がなかなかとれず作業しておりませんでした。

「kurage_mod」の解説の詳細およびダウンロードはこのサイト『弐条海月の「とはずがたり」』のコンテンツ『HSP用文字処理モジュール「kurage_mod」のページ』をご覧ください。同ページの中ほどにある表の命令名に詳細へのリンクを貼っております。


自作アプリのバグ修正…

昨日の日記で書きました、Windowsで動作するフリーのインタプリタ型プログラム言語「HSP(Hot Soup Processor)3.2」で開発した仕事で使うアプリケーションをテストをしてもらうべく、このアプリケーションを使用するスタッフに渡したのですが、いきなりバグが見つかりました。テキストのリストが日付順に並んでいないとの報告をもらいました。私の環境では問題なかったのに…不思議です。今日はそのお話。

このアプリケーションは、先方から定期的に送られてくるテキストデータを整形して1日ごとのファイルに変換。その後、1日ごとのファイルから中のデータ(数値や文字列)に対応する画像ファイルを選び出し、それをグラフのようなベースの所定の場所に貼り付けて最終的に印刷用の画像を作るというものです。

並び替え自体は簡単な処理ですが、私の環境では正しく日付の若い順に並んでおりましたので考えてもみませんでした。バグ対策としては、HSP純正プラグインの「hspda.dll」の命令「sortnote」を使い、改行入りテキスト(この場合日付入りテキストファイルのリスト)を若い順で並び替えることで解決しました。

#include "hspda.as"	//プラグインの呼び出し
sortnote TEXT_LIST,0//変数TEXT_LISTを若い順に並べ替え

余談ですが「sortnote」命令はかつてバグを内包していたような…。並べ替え後に余計な改行が入ってしまうため、自作のモジュール命令で改行のみの余計な空白行を削除していた記憶があります。HSP3.2の「hspda.dll」にはその問題がありませんでした。


HSPでのループ処理とか…

 Windowsで動作するフリーのインタプリタ型プログラム言語「HSP(Hot Soup Processor)」にて、仕事の中で行う作業を補助するアプリケーションを数々自作しておりますが、時々思い立って突然プログラムを書き始めることがあり、そういう時は集中してダーッと書いていくので後でソースを見返すと「力技(ちからわざ)にてゴリ押ししているところがたくさんあったりして笑えます。今日はその一例を挙げてみようと思います。

 今日ご紹介するソースは、週1回、取引先からメールで届くテキストデータを、自動で整形してこちらの欲しい形式に変換するアプリケーションです。確か以前、この日記の中で書いたことがあったと思います。立ち上がったプログラムのウインドウにメールの文章をコピー&ペーストして「処理開始ボタン」を押すと、文字列の整形処理が瞬時に行われ、成型後のデータが表示されるというものです。私はこうやってできたデータをさらにコピーしてIllustratorのテンプレートに貼る作業をしております。手作業でやる場合に比べると大幅な時間短縮になり会社的にはコストが削減できるのは言うまでもありませんが、それより何より、私の精神衛生上とてもよろしいのは言わずもがなプライスレスです(爆)。

 それでは、ダーッと書いたソースの一端をお見せします。これは先述した自作モジュールを使った文字列置換の処理の部分です。

W_QA(0) ="‡1‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡2‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡3‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡4‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡5‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡6‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡7‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡8‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡9‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA
W_QA(0) ="‡10‡" : W_QA(1) ="" : K_REP_S CHANGE_DATA,W_QA

 ざっと説明しますと、W_QAというのは文字列置換用に用意した配列変数です。W_QA(0)が置換対象の文字列、W_QA(1)が新たに置き換える文字列です。で、実際の命令がその後ろに記述している「K_REP_S CHANGE_DATA,W_QA」の部分です。こんな命令は本来HSPにはありません。HSPは標準では文字処理の命令が弱いので、自分で書いた文字処理用モジュール「kurage_mod」を使って色々なアプリケーションを開発しているのです。この命令「K_REP_S」もそう。特に文字の置換については自分で開発したモジュールがあるとえらく開発が進むので、自画自賛ですが重宝しております(笑)。余談ですが、自作の文字列置換命令「K_REP_S」は1度だけ実行する命令。対象の文字が何ヶ所にもわたり、そのすべてを置き換えたい場合のために「K_REP」という命令も用意してあります。

 さて、サンプルソースの1行目の場合ですと「”‡1‡”という文字列がテキストデータ上にあったならば取り去ってしまえよ」という意味になります。「‡」という普段使わない文字を使っているのは、間違いなく置き換えができるようにするためです。実はこのソースはプログラムの後半に出てくるもので、前半にも同じような処理があり、そこで「‡」を追加しているのです。理由は先ほども書いた通り通常使われない文字だから。プログラム序盤で「‡」を加え、中盤の整形処理で「‡」に囲まれた数字は通し番号だという認識をさせておき、サンプル部分の終盤で役目を終えた通し番号を削除する…そんな流れです。

 さて、サンプルソースに話を戻して…。同じような記述が10行にもわたって書かれていますね。我ながら恥ずかしいです(笑)。こんなのループ処理でもっと短く書けるだろう?って思いますよね。私の場合、気分が乗っている時は思考の流れを止めたくないので、ついループ処理などを後回しにしてしまいます。そのために膨大なプログラムを書くことになり、あとでソースを見直すと2分の1から3分の1位くらいの行数になってびっくりすることもあるくらいです(笑)。

 上記のサンプルをループ処理を使って書き直すと以下のようになりますよ。

W_QA(1) =""
repeat 10,1
	W_QA(0) ="‡" + cnt + "‡" : K_REP_S CHANGE_DATA,W_QA
	await
loop

 もうどうしようもないくらい短くなりましたね(笑)。これで先ほどのソースと同じ動作をします。repeat命令はHSP標準のもの。repeatの後ろのパラメーターの10は10回リピートせよという意味です。同じくパラメーターの1は、リピート中回数を示すシステム変数cntの始まりの数値をデフォルトの0からではなく1からにせよ、という意味です。あとは自作モジュールの命令「K_REP_S」で置き換えをしています。

 今回手を入れたアプリは、先日作った日々変わるテンプレートを簡単に用意できるアプリと関連性があるので、できれば統合したいところなのですが…他にもやらねばならぬことが山積しておりますので時間ができたなら着手したいと思います。

 それと、以前はこのモジュール「kurage_mod」を公開していたのですが、日記をWordPressにしてからそのページが非公開になってしまいました。もう少ししたら、そのページを書き直しモジュールを公開したいと思います。


HSPのアプリの話…。

 仕事で使うアプリケーションの話です。フリーのインタプリタ型プログラム言語「HSP(Hot Soup Processor)」で開発したアプリを3年ほど部署内で使ってもらっているのですが、久々にアップデートしました。このアプリは、いくつかのテキストファイルをまとめ、タグを付けてサーバに保存するためのものです。ここでタグ付けされたテキストファイルは後でWEBサイト用に加工したり、サーバ内のテキストファイルデータベース作成の際に使っているのです。

 ところが、3年前に開発した最初のバージョンのタグ付けエディタは普段、私が使わないせいもあってアップデートを行っていませんでした。アプリの終了時にエラーが出ることがあるのは知っておりましたが、アプリの動作に影響するバグではないのでスタッフには申し訳ないとは思いつつも放置しておりました(笑)。

 ですが最近、私もこのアプリを使う機会が増えてきてたんです。すると…バグはもちろんのこと、色々と改善したい点が出てきたので手をかけることにしたのです。 もちろん、普段このアプリを使っているスタッフに意見を求め、改善してほしいところや、あったら良いと思う機能をリサーチ。それを反映したアプリを開発し直すことにしました。

 3年前に書いたソースを見直すと…かなりおかしな処理を行っているところがいっぱいありました。いつものことですが(笑)。それでも、基本的には大きく手を入れることなく済みましたので、新規で追加する機能の開発に力を入れることができました。

 メインの仕事の合間に少しずつ手をかけて1週間ほどで完成。2日間はデバック作業を行い問題がなかったので本日、プロトタイプをEXEファイル化。スタッフに配布して作業してもらいました。

 目新しい機能としては、すでにタグ付けしてテキストファイルを保存する作業は手慣れているはずなので、いちいち確認のダイアログを出さずに処理することができるよう手直ししました。もちろん、いちいち確認したいとても心配性の人は従来通り確認画面を出すことができるので問題ないです(笑)。

 また、アプリの動作速度を改善。起動、各種の処理のスピードが20〜50%アップしているはず。サクサクと作業できるようになりました。

 次はテキストを作業前に整形・表記の間違いがないかどうか確認するアプリを仕上げたいと思います。このアプリは使う人はたった一人ですが結構重要なものなのです。去年の6月に着手するも遅々として進まず、同年9月にようやくプロトタイプが完成しましたが、いくつかの問題点を残したまま棚上げしておりました(笑)。開発しているバー
ジョンは3代目ですが、低機能だった初代から一気に高機能のアプリに変貌した2代目がバグだらけだったので、そのまま初代のアプリを使ってもらっているという申し訳ない状況なのです。

 日々暑いですが、集中力を切らさずに作業したいと思います。


Ubuntu のWineでHSPを動かす

WineでHSP

WineでHSP

 ネットブック「HP Mini 1000 Vivienne Tam Edition」に入れた「Ubuntu 10.04」にWindowsのアプリを動かすことのできる「Wine」をインストールしています。その「Wine」上でWindowsで動作するフリーのインタプリタ言語「HSP(HotSoup Processor)」を動かしてみました。なんかまどろっこしい書き方ですが、ようはUbuntuでHSPを使いたいのでやってみたということです(笑)。

 HSPの公式サイトhttp://hsp.tv/で用意した「HSP3.21」インストーラーは、残念ながら動作しませんでした。ですので、インストーラーをあらかじめWindowsで展開しておく必要があります。HSPの入ったフォルダをWineのC:Program Filesに入れておきます。そうすると…無事に起動しました。簡単ですね。

 ですが、フォントが汚いです(笑)。フォントを変更してみたり…試したのですが改善されないですね。まぁ取りあえず良しとしますけれども。

 そう言えば、UbuntuにはHSPと同じくインタプリタ言語のPythonが標準で入っておりますね。こちらはプラットフォームを問わずLinux、Mac、Windowsでも動作するので使い勝手が良いのでしょうが未習得です。これに対し基本はWindowsでしか動作しないHSPですが、何より使い慣れておりますからガリガリとプログラムが書けますし、それがLinux(Ubuntu)で動作するとなれば嬉しいことこの上無しです。

 さて、何を作ろうか…って言っても取り急ぎ作るものがありませんので、時間を見つけつつ既存のプログラムのバージョンアップでもしてみようと思います(笑)。


固定ページ

最近の投稿

カテゴリー





カレンダー

2024年7月
1234567
891011121314
15161718192021
22232425262728
293031  

過去の日記はこちら

キーワードで検索