カーソル行の数値を合計(改良希望)No.06046
秀次郎 さん 09/02/15 18:33
 
初めまして。
タイトル通りです。
仕様についてはコメント文で御理解頂けるのではと思っております。
コメントにもありますとおり数値の直後に改行があるとうまく処理できません。
駄目出し・改良案を頂ければ幸いです。
既出の質問でしたら御容赦ください。

// sum1line.mac
// カーソル行の半角数字の数値を合計するマクロ
// 半角数字以外は区切り記号と見なすのでデータはTAB区切りでもコンマ区切りでも
良い
// 仕様から小数点も区切り記号と見なす。
// ex> 1 2 3.14 => 1 + 2 + 3 + 14 = 20  小数点がある事を報告した方が良い気が
してきた。
// 仕様から日本語交じり文でも処理する。ex> りんご3個となし5個とみかん4個の合
計は => 12
// 現バージョンでは数値の直後に改行があると次の行も合計されてしまうbugあり。
// ex> 1 2 3[改行]
//   > 4 5 6 => 1 + 2 + 3 + 4 + 5 + 6 = 21になってしまう。1 2 3の行なら6にし
たい。
// 正規表現 searchdown "[0-9]+",regular を使うとなぜか行頭の数値を拾わないの
で code で数値を拾う事にしました。

#sum = 0;  // 合計値
golinetop2;  // 論理行頭に移動

while ( code != 0x0D && code != eof ){ // 改行かEOFまで繰り返し うまく処理
されていない様子
 #num = 0;
 // 数値取得
 while ( '0' <= code && code <= '9' ) {
  #num = #num * 10 + code - '0';
  right;
 }
  // message str(#num); // for debug
  if ( code == '.' ) {
   $comma = "小数点があります. ";
  }
 #sum = #sum + #num;
 right;
}

message $comma + "合計 = " + str(#sum);
setclipboard str(#sum); // クリップボードに合計値を入れる。

endmacro;

[ ]
RE:06046 カーソル行の数値を合計(改良希No.06047
h-tom さん 09/02/15 19:09
 

h-tom です。

>// 正規表現 searchdown "[0-9]+",regular を使うとなぜか行頭の数値を拾
>わないので code で数値を拾う事にしました。
searchdown2を使えばいいのでは?

この例の場合、
> 1 2 3
> 4 5 6

この箇所で、改行文字にいることになる。(code=0xd)
> // 数値取得
> while ( '0' <= code && code <= '9' ) {
>  #num = #num * 10 + code - '0';
>  right;
> }

その為、
>  // message str(#num); // for debug
>  if ( code == '.' ) {
>   $comma = "小数点があります. ";
>  }
> #sum = #sum + #num;
> right;
この箇所で、次行に移動しているため、改行を認識できない。

[ ]
RE:06047 カーソル行の数値を合計(改良希No.06048
秀次郎 さん 09/02/16 00:06
 
h-tom様、ご助言ありがとうございます。

searchdown2 確かにうまく拾ってくれますね。
こんな感じでしょうか?
 searchdown2 "[0-9]+",regular;
 $num = gettext( foundtopx, foundendy, foundendx, foundendy );
 #num = val($num);

>この箇所で、次行に移動しているため、改行を認識できない。
私も多分、原因はここだろうと思っているのですがうまく処理できません。

[ ]