桁区切りマクロNo.02923
tats さん 02/01/09 22:48
 
こんばんわ。tatsです。三回目の書き込みとなりました。
だいぶマクロ造りも楽しくなって参りました。そこで、
以下の様なマクロを作成致して見ました。
変数$numに対し3桁毎にカンマ区切りに致します。一応
完成はしたのですが、なんか納得が行きません。
もし宜しければ、アドバイス又はこんなマクロも
出来ます・ありますよとお声を頂きたいのですが、
可能でしょうか?

皆様、お忙しい中恐れ入りますが、宜しくご教授の程お願い
申し上げます。

//sampleまくろ----------------------------------------
$num = "125412000";
#b = 3;
#i = 0;
while( true ){
   #numlen = strlen($num);
   if(#numlen < 3)break;
   $num[#i] = "," + rightstr($num,3);
   $num = leftstr($num,(#numlen - 3));
   #i = #i + 1;
}
while( true ){
   $num = $num + $num[#i];
   if(!#i)break;
   #i = #i - 1;
}
$check = leftstr($num,1);
if($check == ","){
   #numlen = strlen($num);
   $num = rightstr($num,(#numlen - 1));
   message $num;
}else{
   message $num;
}
endmacro;
//sampleまくろ----------------------------------------

[ ]
RE:02923 桁区切りマクロNo.02924
三月 さん 02/01/10 07:16
 
>こんばんわ。tatsです。三回目の書き込みとなりました。
>だいぶマクロ造りも楽しくなって参りました。そこで、
>以下の様なマクロを作成致して見ました。
>変数$numに対し3桁毎にカンマ区切りに致します。一応
>完成はしたのですが、なんか納得が行きません。
>もし宜しければ、アドバイス又はこんなマクロも
>出来ます・ありますよとお声を頂きたいのですが、
>可能でしょうか?

思いつきであまりスマートじゃないんですが参考までに
その1は先頭の数字のみ対象(10桁ぐらいまでのみ)
その2はなにがなんでも3桁でカンマをいれる(全角が混じると...)
--------
//--その1---
$num = input("NUM=","125412000");

#num = val($num);
#mod = #num % 1000;
#num = #num / 1000;
$cmm = "";
while( true ){
 if( $cmm != "" ) $cmm = "," + $cmm;
 $cmm = str(#mod) + $cmm;
 if( #num == 0 ){
  break;
 } else {
  if( strlen( str(#mod) ) == 1 ) $cmm = "00" + $cmm;
  if( strlen( str(#mod) ) == 2 ) $cmm = "0" + $cmm;
 }
 #mod = #num % 1000;
 #num = #num / 1000;
}

message $cmm;

//--その2---
$num = input("NUM=","125412000");

#numlen = strlen($num);
#cutsiz = #numlen % 3;
if(#cutsiz == 0)#cutsiz = 3;
$cmm = leftstr($num, #cutsiz );
#cutpos = #cutsiz;
#cutsiz = 3;

while( true ){
 $cut = midstr( $num, #cutpos, #cutsiz );
 if( $cut=="" ) break;
 $cmm = $cmm + "," + $cut;
 #cutpos = #cutpos + #cutsiz;
}
message $cmm;

[ ]
RE:02924 桁区切りマクロNo.02925
ENCODINGSHIFTJIS さん 02/01/10 13:24
 
マクロの変数に正規表現操作ができると、定番のカンマ編集のが
できるのですが。(Web検索でも多数ヒット)

// FormatEdit.mac

$src=input("半角数値入力");
$des="";
while            (strlen($src)>3){// 下位の3桁をつなげる
$des=       ","+rightstr($src, 3)+$des;//push
$src=leftstr($src,strlen($src)-3)     ;//pop
 }
 $des=$src+$des;
 menu $des;
 
文字列の書式編集は各人各様です。

[ ]
RE:02925 桁区切りマクロNo.02926
安久津 さん 02/01/10 16:19
 
>マクロの変数に正規表現操作ができると、定番のカンマ編集のが
>できるのですが。(Web検索でも多数ヒット)
 bregif & bregexp な秀丸で出来ました。
# 文字列じゃなくて面に対して。
検索文字列。(\d{1,3})\f(?=(\d\d\d)+($|\D))
置換文字列。\0,

たのしそうなので私も。(^^;)

    ##i = 1;
    while( ##i < 15 ){
        call comma leftstr("12345678901234567890",##i);
        insert $$return + "\n";
        ##i = ##i + 1;
    }
endmacro;
comma:
    $$n = "";
    ##i = strlen($$1) - 3;
    while( ##i > 0 ){
        $$n = "," + midstr($$1,##i,3) + $$n;
        ##i = ##i - 3;
    }
    $$n = leftstr($$1, 3 + ##i) + $$n;
return $$n;

[ ]
RE:02926 桁区切りマクロNo.02927
tats さん 02/01/10 21:12
 
三月さん ENCODINGSHIFTJISさん 安久津さん
お返事ありがとうございます。

皆様に頂きましたスクリプトを拝見させて頂きました。
やっぱり十人十色で皆様色々ですねぇ〜。
正直、面白いですね。経験もある程度必要なのかも知れませんが、
意外に「ひらめき度?!」みたいなものもマクロを作成するに
おいて必要ですね。「イヒ!」ってひらめきたいものです。(笑)

とても良い勉強になりました。
また、お返事本当にありがとうございました。

[ ]