「数値を増減」の版間の差分
細 指数の数値を変更 |
マクロを改修 |
||
| 1行目: | 1行目: | ||
__NOTOC__ | |||
カーソル付近or選択範囲に半角数字列があれば 1 増やし/減らします。 | カーソル付近or選択範囲に半角数字列があれば 1 増やし/減らします。 | ||
| 44行目: | 45行目: | ||
|<code><span style="border-left:2px solid; background:#bfdfff;">11.10e3</span></code> | |<code><span style="border-left:2px solid; background:#bfdfff;">11.10e3</span></code> | ||
|} | |} | ||
==更新履歴== | |||
* 2014/06/19 | |||
** 非選択時、探索終了位置(bx)の算出方法を変更。 | |||
** 数値の増減処理を改修(繰り上げ・繰り下げの場合分けが不要に)。 | |||
* 2014/06/17 | |||
** 初版公開。 | |||
==数値を増やす (インクリメント)== | ==数値を増やす (インクリメント)== | ||
<source lang="javascript"> | <source lang="javascript"> | ||
//■数値を増やす(インクリメント) | //■数値を増やす(インクリメント) | ||
// 2014/06/17 | // 2014/06/17-2014/06/19 | ||
//・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。 | //・カーソル付近or選択範囲の10進数値(半角)を 1 増やす。 | ||
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。 | //▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。 | ||
| 57行目: | 65行目: | ||
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか? | var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか? | ||
var isSel = !sel.isEmpty; //範囲選択しているか? | var isSel = !sel.isEmpty; //範囲選択しているか? | ||
if (!isSel) { // | if (!isSel) { //非選択時、文字を探索して範囲選択 | ||
var meP = mePosLogical, meGL = 0; | var meP = mePosLogical, meGL = 0; | ||
var px = sel.GetActivePointX(meP); | var px = sel.GetActivePointX(meP); | ||
| 63行目: | 71行目: | ||
var ln = Document.GetLine(py,meGL); | var ln = Document.GetLine(py,meGL); | ||
var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index; | var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index; | ||
var bx = | var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length; | ||
sel.SetActivePoint(meP,bx,py); | sel.SetActivePoint(meP,bx,py); | ||
sel.SetAnchorPoint(meP,tx,py); | sel.SetAnchorPoint(meP,tx,py); | ||
| 70行目: | 78行目: | ||
var carry = 0; //文字数(桁)変動量 | var carry = 0; //文字数(桁)変動量 | ||
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){ | sel.Text = sel.Text.replace(/[0-9]+/g,function(s){ | ||
return | 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"); | |||
if (!s1) carry++; //◆桁上がり | }); | ||
return (parseInt(s1||0)+1)+(new Array(s2.length+1)).join("0") | |||
}); | }); | ||
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定 | sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定 | ||
| 85行目: | 90行目: | ||
<source lang="javascript"> | <source lang="javascript"> | ||
//■数値を減らす(デクリメント) | //■数値を減らす(デクリメント) | ||
// 2014/06/17 | // 2014/06/17-2014/06/19 | ||
//・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。 | //・カーソル付近or選択範囲の10進数値(半角)を 1 減らす。 | ||
//▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。 | //▲負数(-1)/小数(0.1)/指数(1.2e3)などは考慮しない。 | ||
| 94行目: | 99行目: | ||
var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか? | var isAcp = (acp<anp)? true: false; //範囲終点が前方にあるか? | ||
var isSel = !sel.isEmpty; //範囲選択しているか? | var isSel = !sel.isEmpty; //範囲選択しているか? | ||
if (!isSel) { // | if (!isSel) { //非選択時、文字を探索して範囲選択 | ||
var meP = mePosLogical, meGL = 0; | var meP = mePosLogical, meGL = 0; | ||
var px = sel.GetActivePointX(meP); | var px = sel.GetActivePointX(meP); | ||
| 100行目: | 105行目: | ||
var ln = Document.GetLine(py,meGL); | var ln = Document.GetLine(py,meGL); | ||
var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index; | var tx = 1 + (ln.slice(0,px-1).match(/[0-9]*$/)).index; | ||
var bx = | var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length; | ||
sel.SetActivePoint(meP,bx,py); | sel.SetActivePoint(meP,bx,py); | ||
sel.SetAnchorPoint(meP,tx,py); | sel.SetAnchorPoint(meP,tx,py); | ||
| 107行目: | 112行目: | ||
var carry = 0; //文字数(桁)変動量 | var carry = 0; //文字数(桁)変動量 | ||
sel.Text = sel.Text.replace(/[0-9]+/g,function(s){ | sel.Text = sel.Text.replace(/[0-9]+/g,function(s){ | ||
return | 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 | |||
if (!s1&&s2==1) {carry--; s1=s2=""; | } else s2 = s2-1; //◆ しない >1100→1/1/00→1/0/99→1099 | ||
else | return s1+s2+(new Array(s3.length+1)).join("9"); | ||
return s1+s2+(new Array(s3.length+1)).join("9") | }); | ||
}); | }); | ||
sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定 | sel.SetAnchorPos(isAcp? anp+carry: anp); //範囲始点を再設定 | ||
| 122行目: | 125行目: | ||
==位取り対応== | ==位取り対応== | ||
<source lang="javascript"> | <source lang="javascript"> | ||
var bx = | var bx = tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length; | ||
↓ | ↓ | ||
var bx = (px!=tx)? px: | var bx = (px!=tx)? px: tx + (ln.slice(tx-1).match(/[0-9]*/))[0].length; | ||
</source> | </source> | ||
* マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。 | * マクロの中盤(17行目)を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。 | ||
スポンサーリンク