「数値を増減」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
Masme (トーク | 投稿記録)
書式ミス修正
Masme (トーク | 投稿記録)
更新履歴の書式を調整
3行目: 3行目:


* カーソル位置は、数字の左端・中間・右端どこでもかまいません。<br>範囲選択時は、範囲内の数字列が対象となります。<br><span style="color:#c00;">※マクロの仕様上、矩形選択には対応していません。</span>
* カーソル位置は、数字の左端・中間・右端どこでもかまいません。<br>範囲選択時は、範囲内の数字列が対象となります。<br><span style="color:#c00;">※マクロの仕様上、矩形選択には対応していません。</span>
:{| class="wikitable" style="text-align:center;"
:{|class="wikitable" style="text-align:center;"
!  !! 左端 !! colspan="2"|中間 !! 右端 !! 範囲選択時
!  !! 左端 !! colspan="2"|中間 !! 右端 !! 範囲選択時
|-
|-
21行目: 21行目:
|}
|}
* 先頭の 0 埋め (ゼロパディング/ゼロサプライ) は考慮されます。<br>負数 (-1)/小数 (0.1)/指数 (1.2e3) などは考慮されません。
* 先頭の 0 埋め (ゼロパディング/ゼロサプライ) は考慮されます。<br>負数 (-1)/小数 (0.1)/指数 (1.2e3) などは考慮されません。
:{| class="wikitable" style="text-align:center;"
:{|class="wikitable" style="text-align:center;"
! ゼロなし !! ゼロあり !! ※負数 !! ※負数 !! ※小数 !! ※指数
! ゼロなし !! ゼロあり !! ※負数 !! ※負数 !! ※小数 !! ※指数
|-
|-
47行目: 47行目:


==更新履歴==
==更新履歴==
* <b>2014/06/19</b>
* 2014/06/19
** 非選択時、探索終了位置(bx)の算出方法を変更。
** 非選択時、探索終了位置(bx)の算出方法を変更。
** 数値の増減処理を改修(繰り上げ・繰り下げの場合分けが不要に)。
** 数値の増減処理を改修(繰り上げ・繰り下げの場合分けが不要に)。
* <b>2014/06/17</b>
* 2014/06/17
** 初版公開。
** 初版公開。


130行目: 130行目:
</source>
</source>
* マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
* マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
:{| class="wikitable" style="text-align:center;"
:{|class="wikitable" style="text-align:center;"
! ※左端 !! 千の位 !! 百の位 !! 十の位 !! 一の位 !! ※範囲選択時
! ※左端 !! 千の位 !! 百の位 !! 十の位 !! 一の位 !! ※範囲選択時
|-
|-

2015年12月26日 (土) 17:06時点における版

カーソル付近or選択範囲に半角数字列があれば 1 増やし/減らします。

  • カーソル位置は、数字の左端・中間・右端どこでもかまいません。
    範囲選択時は、範囲内の数字列が対象となります。
    ※マクロの仕様上、矩形選択には対応していません。
左端 中間 右端 範囲選択時
元値 999 999 999 999 999,999
増やす 1000 1000 1000 1000 9100,1009
  • 先頭の 0 埋め (ゼロパディング/ゼロサプライ) は考慮されます。
    負数 (-1)/小数 (0.1)/指数 (1.2e3) などは考慮されません。
ゼロなし ゼロあり ※負数 ※負数 ※小数 ※指数
99 0099 -1 -0 0.9 9.8e1
100 0100 -1 -1 0.10 10.9e2
101 0101 -1 -2 0.11 11.10e3

更新履歴

  • 2014/06/19
    • 非選択時、探索終了位置(bx)の算出方法を変更。
    • 数値の増減処理を改修(繰り上げ・繰り下げの場合分けが不要に)。
  • 2014/06/17
    • 初版公開。

数値を増やす (インクリメント)

//■数値を増やす(インクリメント)
// 2014/06/17-2014/06/19
//・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。

var sel = Document.Selection;
var anp = sel.GetAnchorPos();
var acp = sel.GetActivePos();
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isSel = !sel.isEmpty; //範囲選択しているか?
if (!isSel) { //非選択時、文字を探索して範囲選択
  var meP = mePosLogical, meGL = 0;
  var px = sel.GetActivePointX(meP);
  var py = sel.GetActivePointY(meP);
  var ln = Document.GetLine(py,meGL);
  var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
  var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
  sel.SetActivePoint(meP,bx,py);
  sel.SetAnchorPoint(meP,tx,py);
  isAcp = (px==tx)? true: false; //カーソルが左端(前方)にあるか?
}
var carry = 0; //文字数(桁)変動量
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
  return s.replace(/([0-8]?)(9*)$/,function(s0,s1,s2){
    if (!s1) carry++;	//◆桁上がり
    return (parseInt(s1||0)+1)+(new Array(s2.length+1)).join("0");
  });
});
sel.SetAnchorPos(isAcp? anp+carry: anp);	//範囲始点を再設定
sel.SetActivePos(isAcp? acp: acp+carry, isSel);	//範囲終点(カーソル位置)を再設定

数値を減らす (デクリメント)

//■数値を減らす(デクリメント)
// 2014/06/17-2014/06/19
//・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。

var sel = Document.Selection;
var anp = sel.GetAnchorPos();
var acp = sel.GetActivePos();
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか?
var isSel = !sel.isEmpty; //範囲選択しているか?
if (!isSel) { //非選択時、文字を探索して範囲選択
  var meP = mePosLogical, meGL = 0;
  var px = sel.GetActivePointX(meP);
  var py = sel.GetActivePointY(meP);
  var ln = Document.GetLine(py,meGL);
  var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index;
  var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
  sel.SetActivePoint(meP,bx,py);
  sel.SetAnchorPoint(meP,tx,py);
  isAcp = (px==tx)? true: false; //カーソルが左端(前方)にあるか?
}
var carry = 0; //文字数(桁)変動量
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){
  return s.replace(/([0-9]?)([1-9])(0*)$/,function(s0,s1,s2,s3){
    if (!s1 && s2==1 && s3) {
      carry--; s1=s2="";	//◆桁下がりする >100 → /1/00→ / /99→99
    } else s2 = s2-1;		//◆   しない >1100→1/1/00→1/0/99→1099
    return s1+s2+(new Array(s3.length+1)).join("9");
  });
});
sel.SetAnchorPos(isAcp? anp+carry: anp);	//範囲始点を再設定
sel.SetActivePos(isAcp? acp: acp+carry, isSel);	//範囲終点(カーソル位置)を再設定

位取り対応

  var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
 
  var bx = (px!=tx)? px: tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length;
  • マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。
    ※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
※左端 千の位 百の位 十の位 一の位 ※範囲選択時
999 0000 900 990 999 999,999
1000 1000 1000 1000 1000 9100,1009
1001 2000 1100 1010 1001 9101,1019
スポンサーリンク