プログラミング

2015年1月20日 (火)

日記(ブログ)用のスクリプトを弄る4

2015-01-20(火)晴れ

 昨年末頃に題記の件で、メモ用に使うためのブログ用cgiを改造しました。その後、結構使っています。
  前回の記事 「日記(ブログ)用のスクリプトを弄る3

 沢山投稿するとか、日記として使用するわけではなくて、どこからでも、どのPC、どの携帯電話からでも閲覧したり修正できるメモとしての使い方です。
 で、一点、不便だったので改造しました。既存のサービスのブログではないから、こういう時は自由がきいて便利です。ただ、機能を増やすのは手間がかかって大変ですが。

 不便だったのはページ切替がページ最下端にしかなく、最初からページ切替したい場合でも必ずページ最下端までスクロールしないといけないことでした。で、ページのトップにも、ページ切替を設けました。

Diary201501_01(ページ下端のページ表示) 

Diary201501_02(ページ上端のページ表示) 

 これで、若干使いやすくなりました。
 このcgiは、以前の記事で書いたサイトからダウンロードしたものを改造して使っているものです。自分で使う分には改造OKですが、改造品の再配布はNGなので改造品の掲載はしていません。

| | コメント (0) | トラックバック (0)

2014年11月20日 (木)

日記(ブログ)用のスクリプトを弄る3

2014-11-20(木)曇り、のち雨

 先日に引き続いて、メモ用に使うということで、日記投稿用のスクリプトを弄っています。
 前回の記事「日記(ブログ)用のスクリプトを弄る2

 前回までで、一応の改造は終わったのですが、一つだけ気になることがありました。それは、ページ切替がボタン方式の表示で、大きな表示で何となく気になります。理由は、htmlの form、buttonを使っているからです。
 と言うことで、webで良く見るような 「[2][3][4]」 形式にするため、javascriptを実行させる方式に変更しました。これも、図書館でhtmlのjavascript事項について調べたりしながら、やっとのことで動くようになりました。一番の教材は、同じスクリプトの、投稿用のほう(admin.cgi)の内容でした。動いている実物が、一番の参考になります。

Diarygamen04a(改造前) 

Diarygamen05a (改造後)

 並べてみたら、あまり変わらないことに気がつきました。が、改造後の方が、何となくWEBにありそうな表示なので良しとしました。勉強にもなりましたし、、。

 ということで、改造は終わりになったようです。
 

| | コメント (0) | トラックバック (0)

2014年11月18日 (火)

日記(ブログ)用のスクリプトを弄る2

2014-11-18(火)晴れ

 昨日は、ブログ用スクリプトを、自分のメモ用に修正している件を書きました。スクリプトの仕様を理解していないので、何日間か、本を読んだりスクリプトを修正しては実行してみたりと、試行錯誤しながらも何とか動くようになりました。perlや、HTMLのform、buttonなどについても、次第に分かってきました。やはり、勉強には実物をいじりながら行うのが良いようです。

Diarygamen02a

 閲覧の方のスクリプトも、パスワードチェックが動くようになりました。

 スクリプト内に直にパスワード機能を入れなくても、入口のHTML画面からパスワード付きリンクを使う手もあります。これなら改造が不要ですが、携帯電話のブラウザに依っては動かないケースもあったので使うのをやめました。また、一旦入ってしまってからの操作のときに、URLの履歴がブラウザに残ると、そのURLで直に入ることが出来ます。自分のPCでしか使わないのなら良いのですが、図書館のPCだと困ります。

Diarygamen04a

 下の部分がページ切替です。これも、普通のリンクを使うとブラウザのアドレス欄でパラメータが見えたり、履歴に残る可能性があるので、POST方式のボタンに変えました。ちょっと、見栄えが悪いですがメモ用なので良しとしました。

Diarygamen01a_2

 入口の画面も修正して、一応の作業が終わりました。後は、活用あるのみです。
 

| | コメント (0) | トラックバック (0)

2014年11月17日 (月)

日記(ブログ)用のスクリプトを弄る1

2014-11-17(月)曇り

 数日来、日記(ブログ)用のスクリプトを改造するため、perlのスクリプトの勉強をしたり、改造とテストを行っています。ブログそのものは、今書いているここで行っていますから不要ですが、実はメモ帳が欲しいのです。それも、図書館のPCから書き込むために、ブログサイトではない方がいいのです。

 図書館のPCで調べ物をしたときに、ちょっとメモしたいことなどがあります。紙と鉛筆でも良いのですが、ちょっと長かったり、URLのようにコピーペーストの方が確実なものもあります。しかし、図書館のPCでは、書いても取り出す方法がありません。外部メモリ媒体はセキュリティの関係から使用禁止ですし、ブログサイトなどもフィルタリングされていますからアクセスできません。

 そこで、自前で借りているサーバに、perlのスクリプトで、ブログのように投稿で書き込めるものを設置することにしました。設置そのものは以前に行ったのですが、今回は閲覧もパスワードで制限する改造をいれました。
 元になるスクリプトは、「CGI Palさんのサイト」の「Diary Ver.18」を使用させていただきました。

Diarygamen03a

 diaryの閲覧画面は、上の画像のように非常にシンプルです。閲覧画面はシンプルですが、管理スクリプトからは投稿の他に、修正、削除や環境設定(パスワード設定や、その他詳細設定)なども行えて、私にとっては充分な機能が入っています。メモに使うには、シンプルな画面の方が良いですしね。それに、改造するのも、シンプルなもののスクリプトの方が理解しやすいです。 

 さて、導入したスクリプトの改造を行います。改造内容は、色々やりながら、下記のようになりました。

(1)閲覧のスクリプトに、パスワードでのチェックを入れる。
(2)ページ切替で再コールされるときに、URLやパラメータが見えない
  ようにする。(ブラウザの履歴に残らないようにする。)
(3)画面に、ホームへ戻ったり、管理から日記閲覧スクリプトに移る
  ためのリンクを設ける。

 パスワードチェックについては、管理用スクリプトの方に入っているので簡単そうに思いましたが、問題は私がperlやHTMLの記法について知らない、、と点でした。perlやHTML間のパラメータのやり取りや、メソッドのGETとPOSTの使い方、ボタンの設置の仕方など、1から勉強しながらです。プログラムの勉強は、既にできているものを調べたり、改造したりするのが良いと言われていますが、確かにその通りでした。ゼロからは無理でも、動いているものからなら、動く範囲で手を加えていく事が出来るからです。

 さて、そんなことをしながら弄っていました。概ね、動き出したので、次の記事では、キャプチャ画面を載せてみたいと思います。
 

| | コメント (0) | トラックバック (0)

2013年6月 7日 (金)

Perlの勉強とAWKとSEDと、、

2013-06-07(金)曇り/晴れ

 先日、出先とか図書館で借りたPCから、メモのテキストを自分のサーバに書き込むCGI(他の方のフリーのモジュールを使いました)を設置したことから、Perlの本を借りて勉強を始めました。勉強には簡単な実例を読み返そうと、以前作ったスクリプトを見直しました。
 以前作ったスクリプトというのは、出納帳からエクスポートしたデータを整形するものです。

QDFNEW :
 これは、HP200LXのPocket Quickenからエクスポートしたデータを、一件1行のCSVファイルにする物です。最初にSEDで作成しましたが、そのスクリプトと同じものをPerlとAWKで作成してありました。

QMONTH :
 これは、上記CSVから月ごと、いくつかの項目毎の集計を出して、表みたいな並びで表示するものです。これは最初からPerlとAWKで作成しました。

 ふたつのPerlのスクリプトをみると、拙い処理とかコーディングで、綺麗な処理に手直しをせざるを得なくなりました。そうなるとAWKのスクリプトも、一緒に手直しです。結局、勉強より手直しがメインになってしまいました。それにしても、同じ処理をSED、AWK、Perl で作成したり手直ししたりすると、頭の中が混乱してきます。特に、AWKとPerlは似ているところが多いけれど、微妙なところが違ったりして悩ましいです。

 SED、AWK、Perlは、処理対象や処理の内容に寄って、得手不得手、あるいは使いやすさ、使いにくさが有るようです。数字の集計などの処理はAWKか、Perlでしょうけど。まだ、どれをメインに使うか、あるいは3種類併存でゆくのか決めかねています。

-------------

上記2つのスクリプトは過去のブログ記事に貼り付けてあったので、差し替えました。

 「HP200LXで家計簿 「AWKとPerlでスクリプト」その2
 「HP200LXで家計簿 「AWKとPerlでスクリプト」その4
 「HP200LXで家計簿 「AWKとPerlでスクリプト」その3

 まとめ記事は「テク’ノート」の「HP200LXと家計簿」です。
 

| | コメント (0) | トラックバック (0)

2011年4月26日 (火)

「AWKとPerlでスクリプト」AWK、Perlの感想と罠

2011-04-26(火)晴れ

 

 「HP200LXで家計簿」、 「AWKとPerlでスクリプト」」ということで、家計簿データ処理用のスクリプトをAWKとPerlで作成してきました。ある程度使えるようになると、AWKやPerlは便利です。演算ができるので、応用範囲が広いですね。テキスト処理だけであればSEDで充分ですが、、。SED、AWK、Perl、、やはり一長一短の部分もあり、各々に向いた処理というのがあるような気がします。

1.感想
 さて、今回使ったAWKとPerlですが、単純に入力ファイルを行毎に処理するとしたら、AWKの方が簡単な気がします。入力取り込みを自分で考える必要がないからです。取り込んだ行データの中のフィールドセパレータ(フィールドの区切り文字)の指定も簡単です。

 Perlは、自分でファイルオープンまでやったりして面倒ですが、その分自由度は高いかもしれません。
 また、Perlが持っている関数機能(サブルーチン機能)は便利で、今回もステップ数を減らすのには効果的でした。

2.間違いやすい点など
 Perlだけ使っていると問題ないけど、AWKも使ったりしていると、ついやってしまうミスがあります。

(1)行末のセミコロンを忘れる。

(2)変数名を間違える。即ち、AWKは名前だけでよいけど、Perlは変数名
  の前に$や@を付けないといけない。付けてなくてもエラーが出ないけど
  結果出力は正しくならない。
   ・スカラー変数は$を付ける(例:$WK)
   ・配列自身は@を付ける(例:@ARY)、でも配列の一つ一つを記述する
    ときは$を付ける(例 $ARY[$i])。

  結構、混乱しました。

(3)十進整数にはシングルとダブル(ロングというのかな)があるのを忘れる。

 この(3)には、はまりました。フォーマットを揃えて(桁数を揃えて)出力するときにprintf(或いはsprintf)を使用するのですが、AWKで作成したときは、金額の合計値を表示させるのに

printf ("%7d %7d \n",  $Ginkei ,$Goukei);

 でうまく行きました(%7d 即ち7桁の十進整数指定)。で、そのままの頭でPerlを使ったら、、、動かないのです。結果数字が合わないんです。表示したい変数の中身(合計値)が小さくなったりマイナスになったり、、。
 色々な数値をいれて表示させてみて気がつきました。32767とか65535を越えるとおかしくなることから、やっと気がつきました。2バイト(2進で16ビット)数字として処理されているわけです。65535を越えると、0からに戻るわけです。
 マニュアルを見たら、、ちゃんとロング(指定をldで行う)がありました。

printf ("%7ld %7ld \n",  $Ginkei ,$Goukei);

でうまく行きました。なお、print分では、どちらでも正しく表示されました(桁数は合わせられないけど)。

 もう一つの考え方は、画面表示は文字列なんだから、文字列指定の「s」を使うのが良いかもしれません。

printf ("%7s %7s \n",  $Ginkei ,$Goukei);

だと、AWKでもPerlでも正しく表示されました。print文と同じように、数字を文字列にして表示してくれるからかもしれません。

 数値を、色々なフォーマット指定で表示させてみました。

 下の画像はAWKの例です。赤で囲んだところも正しく表示されています。

Scrn0014

 下の画像はPerlの例です。赤く囲んだ部分の数値が小さくなっています。2バイトを越えるビット部分が切り落とされた数値になります。

Scrn0015

 下の画像はPerlの例です。赤枠の部分(d指定)はおかしくなっているけど、緑枠(ld指定)は正しくなっています。

Scrn0017

 なかなか、勉強になりました。

 

| | コメント (0) | トラックバック (0)

2011年4月24日 (日)

HP200LXで家計簿 「AWKとPerlでスクリプト」その2

2011-04-24(日)晴れ

 昨日に引き続き、スクリプト作成の話です。Pocket Quickenからのエクスポート出力をEXCEL入力用CSVファイルにするのは、SEDのスクリプトを使用しています(QDFNEW.SED)。

 QDFNEW.SEDのある家計簿の記事:「HP200LXと家計簿

 ついでなので、QDFNEWもAWKやPerlのスクリプトにしてみました。
 実際の処理としてはSEDスクリプトでやっていますし、SEDもアプリを選ぶと高速な処理アプリもありますから使う分には今のままで問題ありません。そこは、スクリプトの勉強という意味合いです。

 QDFNEW.SED のフローチャートを元にAWKのスクリプトを作成し、それを「a2p」というアプリでPerl用に変換してみました。変換しただけで、そのまま動きました(当たり前か、、でも凄い)。

 a2p:AWK to Perl という変換アプリです。vectorのサイトにありました。「a2p

------- モジュール------------------------------------

  「QDFNEWA3.ZIP」  AWK版 新(2013-06-13 追加)
  「QDFNEWP3.ZIP」  Perl版    (念のための判定を入れました。)

  「QDFNEWA2.ZIP」  AWK版 新(2013-06-03 追加)
  「QDFNEWP2.ZIP」  Perl版    (処理を綺麗にしただけです。)

  「QDFNEWAW.LZH」  AWK版  旧
  「QDFNEWPL.LZH」  Perl版   

------------------------------------------------------

| | コメント (0) | トラックバック (0)

2011年4月23日 (土)

HP200LXで家計簿 「AWKとPerlでスクリプト」

2011-04-23(土)雨

 先日からUNIXの本を読み始めて、AWKとPerlの章で足踏みをしていました。というか、勉強のためにスクリプト作成を行っていたわけです。実用になる例題がないと力が入りませんから、HP200LXでの家計簿管理のためのスクリプトを作成することにしました。
 (AWKとPerlでの習作のモジュールは一番下に貼り付けました。)

HP200LXでの家計簿管理は、以下のような流れです。
  この辺の記事は、WEB 「HP200LXと家計簿」 に書きました。

(1)HP200LX Pocket Quicken ですべての口座(銀行預金、クレジットカード、
   サイフ、買い物カード(Edy、pasmoみたいにチャージするもの)などを記入します。
(2)エクスポート機能で、口座単位にトランザクションをエクスポートします。
(3)すべてのエクスポート出力をマージします。
(4)出力をスクリプト処理して、EXCELの入力用CSVファイルにします。
  ( SED使用、QDFNEW.SED)

ここから二つに分かれます。
------- PC使用ルート ----------------------------
(5)上記(4)の出力をEXCELに読み込ませ、更にそれをACCESSに貼り付けます。
  (ACCESSクエリー 家計簿集計MDBを使用する。)
(6)ACCESSのクエリー出力(月別、カテゴリ別に集計した表)を、再度EXCELに
  貼り付けて、色々加工して管理に使用します。

-------- HP200LX LOTUS 1-2-3 ----------------
(7)上記(4)の出力をスクリプト処理して、1-2-3用のCSVファイルにします。
(8)1-2-3に読み込ませます。
(9)年月日でソート、各月の行番号を確認して、月ごとの集計式を入力します。
  この内容で、月ごとの収入、支出数値を確認します。
-------------------------------------------------------------------

 PCルートはPCが必要ですし、1-2-3ルートはHP200LXだけでできるのですが、意外と(9)が面倒です。

 そこで、AWKやPerlのスクリプトでは計算できることを使用して、月別に集計して表を作るスクリプトを作ってみました。

■スクリプトは、(4)の出力を読んで、月別の収入、支出、年間合計を表にする。
という内容にしました。

 下の画像の様なフォーマットのデータが入力です。

Scrn0006

 結果として、下の画像の出力を得ることができました。何とか成功です。(図ではスクリーンショットを1枚にする関係で、7~10月の行を削除しています。)

Scrn0005

 SEDスクリプトや高級言語でのプログラム経験があるので、AWKやPerlも理解しやすかったです。文脈アドレスとか正規表現とかが分かると作りやすいですね。SEDはテキスト処理としては簡単でよいのですが、集計ができません。こういう処理はAWKやPerlの出番です。

 次は、いくつかの気になるカテゴリの月別集計も入れようかとか、数字を3桁区切りにして表示しよう、、とか考えています。

----------  モジュール -----------------------------------
  「QMONTHAW.LZH」  AWKのスクリプト

  「QMONTHPL.LZH」  Perlのスクリプト
--------------------------------------------------------

 

| | コメント (0) | トラックバック (0)

2011年4月19日 (火)

UNIXの勉強、、というよりAWKの勉強を始めた

2011-04-19(火)

 UNIXとかCとかC++とかの本は、以前から何冊も買っていながら、結局積み上げたままになっていました。これでは、いけないと、まずはUNIXの初歩的な本から読み始めてみました。

 

Dsc03360a_2

 いずれは、部屋の転がっているPCのどれかか、あるいはPCを中古で買って、UNIXマシンにしてみようかと思って読み始めました。

 が、、、途中で引っかかっています。それは、、、(スクリプト言語の)AWKの章でAWKにのめり込んでしまって、そこで止まってしまいました。HP200LXにJGAWKを入れて、スクリプトを書いてはテストして勉強しています。
 以前、HP200LXの家計簿(Pocket Quicken)からエクスポートしたデータを、SEDで処理して使うようにしましたが、そのSEDスクリプトの処理をAWKで組んでみようとしています。どんどん、UNIXから離れていくなあ、、と思いつつ、AWKの勉強をしています。
 ところで、この本の次の章はPerlです。ここでも、道草をするのでしょうか。

 以前、1回AWKを見て投げ出した事がありましたが、今回は比較的簡単に理解することができています。
SEDで、文脈アドレスとか正規表現とかを勉強したことや、BASICやPythonの知識(if then elseとかLOOPとかの知識)が役に立っているようです。

 AWKで家計簿用のスクリプトができたら、以前SED版を載せた「テク’ノート」の「HP200LXで家計簿」の項に貼り付けてみる予定です(わざわざ使う方はいないと思いますが)。

 

| | コメント (0) | トラックバック (0)

2011年2月21日 (月)

SELNO.COM アセンブラでアセンブルしないでプログラムを作る

2011-02-21(月)曇り/晴れ、風があって少し寒い

 ここのところ、DOS(HP200LX)上でのバッチファイルを弄ったり、DOS上のソフトの使用法を調べたりと、DOSにかかり切りです。というのも、スケジュール管理の「タグスケ」とか、読みたい本や聞きたいCDなどの管理を行う「BOOK.BAT」通称ブック・マン(book manager)の改造、テストなどを行っているからです。
  「タグスケ」については、「この辺」とか「この辺
  「BOOK.BAT」については「このあたりから

 バッチファイルを弄っているときに、小さい(10バイトくらい)けれどよく使うプログラムの事を思い出して、過去のメモを読んで懐かしく思い出しました。この、「SELNO.COM」(注1)の考え方と名称は、パソコン通信時代にFHPPCで活躍されていたYAFOさんの投稿から戴いたものです。
 YAFOさんは、人間がアセンブルした10バイトほどの16進数データを「DEBUG」(注2)で、COMモジュールにしたものです。

   注1:SELNO.COMは、キーボードからの数字1桁の入力を待って
      入力された数字と同じエラーレベル数値をDOSシステムへ渡す
      プログラムです。これを使って、バッチ内での処理を選択することが
      できます。
      私の作成した版は、上記BOOK.BATについてのサイトにある
      SEL_TAG_BAT.ZIP の中にあります。

   注2:DEBUGというのはDOS に入っているデバッガのソフトです。
      DOS上で動かすプログラムのデバッグに使用できるものです。

 私は、このYAFOさんのSELNO.COMの動作を1カ所変えたくて、マクロアセンブラとMS-DOSのマニュアルと首っ引きで、アセンブラで数ステップのプログラムを書きました。これをアセンブルする方法は、「GETKEY.COM」を作った方の情報を参考にしました。この方法もDEBUGを使う方法ですが、人間アセンブルしなくても済みます。
 今でも、「GETKEY.COM」でWEB上をサーチすると出てきますが、今のところYAFOさんと同じ、16進数をCOM化する方法がヒットしてきました。
 私が使わせて戴いた方法は、どこから見つけてきたのか、今となっては思い出しません。

 このようなテクニックも、段々見かけなくなって行くのでしょうね。WEB上でも、同じ事をやりたいけどできなくて、質問を出しているサイトも見かけました。
ふと思いついたときに、自分でも見られるように、ここにも書いておこうと思います。

作成は、DOS上でDEBUGを使って行います。DEBUGの操作方法については説明しません。私はHP200LXの生DOSの上で行いました。

作成方法:
 下記の------の間を SELNO.SRC という名前のファイルにし、どこかのディレクトリに入れます。そのディレクトリに移ってから、「DEBUG < SELNO.SRC」 と入力してアセンブルします。同じディレクトリ内に SELNO.COM が作られます。つまるところ、DEBUGをアセンブラとして使うわけですね。2行目~6行目の5ステップが、プログラムです。その他はDEBUGに対するコマンドです。
下の方の太字の「A]はプログラムの長さ(16進数)です。即ち、太字の5ステップを機械語にアセンブルしたときの長さです
----新SELNO.COM----------------------------
A 100
MOV AH,08
INT 21
SUB AL,30
MOV AH,4C
INT 21

N SELNO.COM
RCX
A
W
Q
--------------------------------------------

 SELNO.COM の使い方は、上記注1に書いてあるSEL_TAG_BAT.ZIPの中のSEL_TAG.BATを例に見て下さい。

 なお、下記のようにすれば、GETKEY.COMと同じ動きになるはずです。どこかで見て、作り方の参考にさせていただいたもののコーディングでは INT 16 を使っていましたが、私はINT 21(しかもAHレジスタに入れるパラメータは08)が好きです。
GETKEY.COMは、キーインされた文字のASCIIコードそのものを、エラーレベルとしてDOSに返します。

      (GETKEYそのものでしたので、自分タイプに修正しました(2011-02-22)
----- GETKEY.COM としての動き用 -----

A 100
MOV AH,00    MOV AH,08
INT 16          INT 21
MOV AH,4C
INT 21

N GETKEY.COM
RCX
8
W
Q
-----(おわり)-----

 久々にアセンブラ言語を思い出した日でした。

 


 

| | コメント (2) | トラックバック (0)