カーソル位置の数値に税を加算して書き換えるためのマクロです。 Emmettさんの LXcash.def で小遣い帳をつけていまして, 同じレシートでも科目が異なるものがあるときは分けて記録するのですが, 商品ごとに税額が打たれているわけではないので,面倒だったんですね。 起動キーがないのは,テキストを自動で書き換えるマクロであることから, 不用意に単独で起動しないよう他のマクロからコールするようにしたからです。 = consTax.def = by H_ear #if 0 カーソル位置の数値を取得して消費税率を掛けた数値に書き換える 通常実行で軽減税率,シフト実行で重税率(逆の設定可) 小数点以下は切り捨てがデフォルト(四捨五入の設定可) カンマ区切りを半自動認識(3桁から4桁をまたぐ変換のみ対応)(仕様) #endif * mad for vz! 1 "" ?. k1&ks, ;税率の選択 %k ;====^ カスタマイズ項目 a0, ;; シフト実行時の税率 0:重税率 1:軽減税率 %a b0, ;; 四捨五入の設定 0:無効 1:有効 %b ;; c0, ;; 3桁から4桁になる場合のカンマ区切りの有無 0:無 1:有 %c ;====$ ここまで d=",0123456789", (cd==$20 || ct==1)?{ ;数字の直後なら位置を調整 #s &SF(d,cd) ;戻り値はアドレス(先頭カンマ) (r==0 || r==d)?{ #d >q };ジャンプは使いたくないが… } &SF(d,cd) (r)??{ :q &m("数字ではない.") . } mp[, ps[=pa, ;直接pwに取得できるが汎用性を考慮 &01 pw[=p=r, i-, ; ---- get str ---- (-1){ #d &SF(d,cd) (r)??{} } #b (-1){ #s &SF(d,cd) (r)??{ #d } } #G ; ---- get num #J #I ;作業窓で加工・取得 :l #s (cd==',')?{ #g i++, } (lx)?>l;ここもう少しスマートにしたい &n r[, #[ n], ; ---- add tax ---- (k)?k110, ?k108, ;軽減税率と重税率 %k %a &Im(p,0) &Ia(p,n) &Im(p,k) &Id(p,100) m=r, n=p..0, (b)?{ (m>49)?n++, } ;四捨五入の場合 %b (i==0 && n>999)?{ #s #s } ;桁の繰り上がり %c mi[+, (p..1)?{ &?("%,lu",n,p..1) }?{ &?("%,u",n) } mi], :z ; ---- exit ---- pw], ps], mp], &d #] . ;;00: ; ---- look result ---- ; &m("Result: %d %u $%x '%c' $"%16s$"",r,r,r,r,r) 01: ; ---- buffer ---- (5+$)."$(10,0)$[16]" ;;02: ; ---- sub routine --- ;<-- r = ;--> r = * [Variables] a 加算する税率フラグ(シフト実行時分岐用) b 四捨五入の設定フラグ c カンマ区切りの有無フラグ(未使用) d 数値文字列の先頭アドレス i カウンタ(カンマ数)想定する用途と相違あり k シフトキーフラグ→軽減税率/重税率 m mod 剰余(四捨五入有効時使用) n 取得数値→課税後数値 p ロング演算用ポインタアドレス [Buffers] pa as ps [local] as pw / long int.(4bytes) [History] 2023/03/13 0.10 [Notes] もっと無駄なくできるはずだが… 確かに無駄が多いように思うが,昔みたいに頑張って短くしなくても…とも思う。