「数値を増減」の版間の差分
ナビゲーションに移動
検索に移動
細 更新履歴の書式を調整 |
SyntaxHighlightにcopyの追加 |
||
| (2人の利用者による、間の14版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | |||
カーソル付近 or 選択範囲に半角数字列があれば 1 増やし/減らします。 | |||
* | * カーソル位置は、数字の左端・中間・右端どこでもかまいません。範囲選択時は、範囲内のみが対象となります。 | ||
:{|class="wikitable" style="text-align:center;" | :{|class="wikitable" style="text-align:center;" | ||
! !! 左端 !! colspan="2"|中間 !! 右端 !! 範囲選択時 | ! !! 左端 !!colspan="2"|中間 !! 右端 !! 範囲選択時 | ||
|- | |- | ||
! 元値 | ! 元値 | ||
|< | |<samp><span style="border-right:2px solid;"></span>999</samp> | ||
|< | |<samp>9<span style="border-right:2px solid;"></span>99</samp> | ||
|< | |<samp>99<span style="border-right:2px solid;"></span>9</samp> | ||
|< | |<samp>999<span style="border-right:2px solid;"></span></samp> | ||
|< | |<samp>9<span style="border-right:2px solid; background:#bfdfff;">99,99</span>9</samp> | ||
|- | |- | ||
! 増やす | ! 増やす | ||
|< | |<samp><span style="border-right:2px solid;"></span>1000</samp> | ||
|< | |<samp>10<span style="border-right:2px solid;"></span>00</samp> | ||
|< | |<samp>100<span style="border-right:2px solid;"></span>0</samp> | ||
|< | |<samp>1000<span style="border-right:2px solid;"></span></samp> | ||
|< | |<samp>9<span style="border-right:2px solid; background:#bfdfff;">100,100</span>9</samp> | ||
|} | |} | ||
* | * 0 埋め (ゼロパディング/ゼロフィル) された数値は桁数を維持して増減します。 | ||
* 負数 (-1)/小数 (0.1)/指数 (1.2e3) などには対応していません。 | |||
:{|class="wikitable" style="text-align:center;" | :{|class="wikitable" style="text-align:center;" | ||
! ゼロなし !! | !colspan="2"|ゼロなし/あり !!colspan="2"|負数の例 !! 小数の例 !! 指数の例 | ||
|- | |- | ||
|< | |<samp>99</samp> | ||
|< | |<samp><b style="color:#c00;">00</b>99</samp> | ||
|< | |<samp><span style="border-left:2px solid;"></span>-1</samp> | ||
|< | |<samp>-<b style="color:#c00;">0</b><span style="border-left:2px solid;"></span></samp> | ||
|< | |<samp>0.<span style="border-left:2px solid;"></span><b style="color:#c00;">9</b></samp> | ||
|< | |<samp><span style="border-left:2px solid; background:#bfdfff;">9.8e1</span></samp> | ||
|- | |- | ||
|< | |<samp>100</samp> | ||
|< | |<samp><b style="color:#c00;">0</b>100</samp> | ||
|< | |<samp><span style="border-left:2px solid;"></span>-1</samp> | ||
|< | |<samp>-<b style="color:#c00;">1</b><span style="border-left:2px solid;"></span></samp> | ||
|< | |<samp>0.<span style="border-left:2px solid;"></span><b style="color:#c00;">10</b></samp> | ||
|< | |<samp><span style="border-left:2px solid; background:#bfdfff;">10.9e2</span></samp> | ||
|- | |- | ||
|< | |<samp>101</samp> | ||
|< | |<samp><b style="color:#c00;">0</b>101</samp> | ||
|< | |<samp><span style="border-left:2px solid;"></span>-1</samp> | ||
|< | |<samp>-<b style="color:#c00;">2</b><span style="border-left:2px solid;"></span></samp> | ||
|< | |<samp>0.<span style="border-left:2px solid;"></span><b style="color:#c00;">11</b></samp> | ||
|< | |<samp><span style="border-left:2px solid; background:#bfdfff;">11.10e3</span></samp> | ||
|} | |} | ||
== | == ダウンロード == | ||
* | [[ファイル:数値を増減.zip]] | ||
* | ; 内容 | ||
* | * 数値を減らす.ico | ||
* | * 数値を減らす.js | ||
* | * 数値を増やす.ico | ||
* 数値を増やす.js | |||
* 数値を増減.lib.js | |||
== | == 変更履歴 == | ||
< | * 1.0.3 (2020-05-17) | ||
** ダウンロード版を追加 | |||
** 数値を増減.lib.js にコードの共通部をまとめ、#include する仕様に変更 | |||
** 複数選択に試験対応(Mery 3.0.1 以降) | |||
*** 矩形選択に試験対応(要 ☑マルチ カーソルを有効にする) | |||
**** 複数選択化して(選択範囲を行に分けて)から処理します | |||
** Document.TextLength が使える場合は使うようにした(Mery 3.0.1 以降) | |||
** 都合上、<b style="color:#c00;">Mery 3.0.0 は動作対象外</b>とした | |||
* 1.0.2 (2016-02-28) | |||
** (数値を増やす) 正規表現を ([0-8]?)(9*) → ([0-9])(9*) に一部変更。他微調整 | |||
*** 空文字マッチが発生し、処理にムダができていたのを改善 | |||
** 文字数変化量を Document.Text.length の変化から算出するようにして単純化 | |||
** 数値の増減処理を変更(二段階 replace していた処理を一段階に) | |||
* 1.0.1 (2014-06-19) | |||
** 非選択時、探索終了位置(bx)の算出方法を変更 | |||
** 数値の増減処理を変更(繰り上げ・繰り下げの場合分けを不要に) | |||
* 1.0.0 (2014-06-17) | |||
** 初版公開 | |||
== ソースコード == | |||
=== 数値を増やす.js === | |||
<syntaxhighlight lang="javascript" copy> | |||
#include "数値を増減.lib.js" | |||
数値を増減(function(str){ | |||
return str.replace(/([0-9])(9*)(?![0-9])/g,function($0,a,z){ | |||
return (+a+1) + Array(z.length+1).join("0"); | |||
}); | |||
}); | |||
</syntaxhighlight> | |||
=== 数値を減らす.js === | |||
<syntaxhighlight lang="javascript" copy> | |||
#include "数値を増減.lib.js" | |||
数値を増減(function(str){ | |||
return str.replace(/([0-9]?)([1-9])(0*)(?![0-9])/g,function($0,y,a,z){ | |||
return ((!y && a==1 && z)? "": y+(a-1)) + Array(z.length+1).join("9"); | |||
//桁下がり y/a/z y/a/z | |||
//◆ する>100 ⇒ /1/00⇒ / /99⇒99 | |||
}); | //◆しない>1100⇒1/1/00⇒1/0/99⇒1099 | ||
}); | |||
}); | }); | ||
</syntaxhighlight> | |||
</ | |||
== | === 数値を増減.lib.js === | ||
< | <syntaxhighlight lang="javascript" copy> | ||
function 数値を増減(ope) { | |||
// 2014 | // 2014-06-15 - 2020-05-17 | ||
// | //・カーソル付近or選択範囲の半角数字を 1 増やす/減らす。 | ||
// | //※このファイルはマクロ登録する必要はありません。 | ||
doMultiAction(function(){ | |||
var | var Document = Editor.ActiveDocument; | ||
var | var Sel = Document.Selection; | ||
var | var gap = Document.TextLength || Document.Text.length; | ||
var | var anc = Sel.GetAnchorPos(); | ||
var | var act = Sel.GetActivePos(); | ||
if ( | var invert = (act<anc); //カーソルがアンカーより前か? | ||
var isEmpty = Sel.IsEmpty; | |||
var px = | if (isEmpty) { //非選択時、文字を探索して範囲選択 | ||
var py = | var px = Sel.GetActivePointX(mePosLogical); | ||
var ln = Document.GetLine(py, | var py = Sel.GetActivePointY(mePosLogical); | ||
var tx = 1 + | var ln = Document.GetLine(py,0); | ||
var bx = tx + (ln.slice(tx-1).match(/[0-9]*/ | var tx = 1 + ln.slice(0,px-1).match(/[0-9]*$/).index; | ||
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; //★位取り対応 | |||
Sel.SetActivePoint(mePosLogical,bx,py); | |||
Sel.SetAnchorPoint(mePosLogical,tx,py); | |||
invert = (px===tx); //カーソルは数値の先頭か? | |||
} | } | ||
Sel.Text = ope(Sel.Text); | |||
gap = (Document.TextLength || Document.Text.length) - gap; //文字数変化量 | |||
Sel.SetAnchorPos(anc+(invert? gap: 0)); | |||
Sel.SetActivePos(act+(invert? 0: gap), !isEmpty); | |||
}); | }); | ||
}; | |||
</ | function doMultiAction(fn) { | ||
var Document = Editor.ActiveDocument; | |||
var Sel = Document.Selection; | |||
if (Sel.Mode == null) { fn(); return; } //◆Mery 2 以前 | |||
BeginUndoGroup(); AddUndo(); | |||
if (Sel.Mode===meModeBox) { | |||
Editor.ExecuteCommandById(2254); //範囲を行に分ける | |||
if (Sel.Mode===meModeBox) { | |||
EndUndoGroup(); Document.Undo(); | |||
Status = "マルチカーソルを有効にしてください"; return; | |||
} | |||
} | |||
var len = Document.TextLength; | |||
var sels = [], anc, act; | |||
for (var i=0, n=Sel.Count||1; i<n; i++) { | |||
anc = Sel.GetAnchorPos(i), act = Sel.GetActivePos(i); | |||
sels[i] = {anc:anc-len, act:act-len}; //選択範囲をオフセットで記憶 | |||
} | |||
Sel.Clear(); //選択解除 | |||
for (var i=0, s; s=sels[i]; i++) { | |||
Sel.SetActivePos(s.act+len); | |||
Sel.SetAnchorPos(s.anc+len); //シングル選択 | |||
fn(); //本処理 | |||
anc = Sel.GetAnchorPos(), act = Sel.GetActivePos(); | |||
sels[i] = {anc:anc, act:act}; //選択範囲を更新 | |||
len = Document.TextLength; | |||
} | |||
for (var i=0, s; s=sels[i]; i++) Sel.AddPos(s.anc, s.act); //選択範囲を復元 | |||
EndUndoGroup(); | |||
}; | |||
</syntaxhighlight> | |||
== 位取り対応 == | |||
<syntaxhighlight lang="javascript" copy> | |||
// 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; //★位取り対応 | |||
</syntaxhighlight> | |||
数値を増減.lib.js の内容を上記のように書き換えると、カーソル左側を基準に増減するようになります。 | |||
※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。 | |||
:{|class="wikitable" style="text-align:center;" | :{|class="wikitable" style="text-align:center;" | ||
! ※左端 !! 千の位 !! 百の位 !! 十の位 !! 一の位 !! ※範囲選択時 | ! ※左端 !! 千の位 !! 百の位 !! 十の位 !! 一の位 !! ※範囲選択時 | ||
|- | |- | ||
|< | |<samp><span style="border-left:2px solid;"></span><b style="color:#c00;">999</b></samp> | ||
|< | |<samp><b style="color:#c00;">0</b><span style="border-left:2px solid;"></span>000</samp> | ||
|< | |<samp><b style="color:#c00;">9</b><span style="border-left:2px solid;"></span>00</samp> | ||
|< | |<samp><b style="color:#c00;">99</b><span style="border-left:2px solid;"></span>0</samp> | ||
|< | |<samp><b style="color:#c00;">999</b><span style="border-left:2px solid;"></span></samp> | ||
|< | |<samp>9<span style="border-right:2px solid; background:#bfdfff;">99,99</span>9</samp> | ||
|- | |- | ||
|< | |<samp><span style="border-left:2px solid;"></span><b style="color:#c00;">1000</b></samp> | ||
|< | |<samp><b style="color:#c00;">1</b><span style="border-left:2px solid;"></span>000</samp> | ||
|< | |<samp><b style="color:#c00;">10</b><span style="border-left:2px solid;"></span>00</samp> | ||
|< | |<samp><b style="color:#c00;">100</b><span style="border-left:2px solid;"></span>0</samp> | ||
|< | |<samp><b style="color:#c00;">1000</b><span style="border-left:2px solid;"></span></samp> | ||
|< | |<samp>9<span style="border-right:2px solid; background:#bfdfff;">100,100</span>9</samp> | ||
|- | |- | ||
|< | |<samp><span style="border-left:2px solid;"></span><b style="color:#c00;">1001</b></samp> | ||
|< | |<samp><b style="color:#c00;">2</b><span style="border-left:2px solid;"></span>000</samp> | ||
|< | |<samp><b style="color:#c00;">11</b><span style="border-left:2px solid;"></span>00</samp> | ||
|< | |<samp><b style="color:#c00;">101</b><span style="border-left:2px solid;"></span>0</samp> | ||
|< | |<samp><b style="color:#c00;">1001</b><span style="border-left:2px solid;"></span></samp> | ||
|< | |<samp>9<span style="border-right:2px solid; background:#bfdfff;">101,101</span>9</samp> | ||
|} | |} | ||
2025年6月30日 (月) 00:10時点における最新版
概要[編集]
カーソル付近 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
ダウンロード[編集]
- 内容
- 数値を減らす.ico
- 数値を減らす.js
- 数値を増やす.ico
- 数値を増やす.js
- 数値を増減.lib.js
変更履歴[編集]
- 1.0.3 (2020-05-17)
- ダウンロード版を追加
- 数値を増減.lib.js にコードの共通部をまとめ、#include する仕様に変更
- 複数選択に試験対応(Mery 3.0.1 以降)
- 矩形選択に試験対応(要 ☑マルチ カーソルを有効にする)
- 複数選択化して(選択範囲を行に分けて)から処理します
- 矩形選択に試験対応(要 ☑マルチ カーソルを有効にする)
- Document.TextLength が使える場合は使うようにした(Mery 3.0.1 以降)
- 都合上、Mery 3.0.0 は動作対象外とした
- 1.0.2 (2016-02-28)
- (数値を増やす) 正規表現を ([0-8]?)(9*) → ([0-9])(9*) に一部変更。他微調整
- 空文字マッチが発生し、処理にムダができていたのを改善
- 文字数変化量を Document.Text.length の変化から算出するようにして単純化
- 数値の増減処理を変更(二段階 replace していた処理を一段階に)
- (数値を増やす) 正規表現を ([0-8]?)(9*) → ([0-9])(9*) に一部変更。他微調整
- 1.0.1 (2014-06-19)
- 非選択時、探索終了位置(bx)の算出方法を変更
- 数値の増減処理を変更(繰り上げ・繰り下げの場合分けを不要に)
- 1.0.0 (2014-06-17)
- 初版公開
ソースコード[編集]
数値を増やす.js[編集]
#include "数値を増減.lib.js"
数値を増減(function(str){
return str.replace(/([0-9])(9*)(?![0-9])/g,function($0,a,z){
return (+a+1) + Array(z.length+1).join("0");
});
});
数値を減らす.js[編集]
#include "数値を増減.lib.js"
数値を増減(function(str){
return str.replace(/([0-9]?)([1-9])(0*)(?![0-9])/g,function($0,y,a,z){
return ((!y && a==1 && z)? "": y+(a-1)) + Array(z.length+1).join("9");
//桁下がり y/a/z y/a/z
//◆ する>100 ⇒ /1/00⇒ / /99⇒99
//◆しない>1100⇒1/1/00⇒1/0/99⇒1099
});
});
数値を増減.lib.js[編集]
function 数値を増減(ope) {
// 2014-06-15 - 2020-05-17
//・カーソル付近or選択範囲の半角数字を 1 増やす/減らす。
//※このファイルはマクロ登録する必要はありません。
doMultiAction(function(){
var Document = Editor.ActiveDocument;
var Sel = Document.Selection;
var gap = Document.TextLength || Document.Text.length;
var anc = Sel.GetAnchorPos();
var act = Sel.GetActivePos();
var invert = (act<anc); //カーソルがアンカーより前か?
var isEmpty = Sel.IsEmpty;
if (isEmpty) { //非選択時、文字を探索して範囲選択
var px = Sel.GetActivePointX(mePosLogical);
var py = Sel.GetActivePointY(mePosLogical);
var ln = Document.GetLine(py,0);
var tx = 1 + ln.slice(0,px-1).match(/[0-9]*$/).index;
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; //★位取り対応
Sel.SetActivePoint(mePosLogical,bx,py);
Sel.SetAnchorPoint(mePosLogical,tx,py);
invert = (px===tx); //カーソルは数値の先頭か?
}
Sel.Text = ope(Sel.Text);
gap = (Document.TextLength || Document.Text.length) - gap; //文字数変化量
Sel.SetAnchorPos(anc+(invert? gap: 0));
Sel.SetActivePos(act+(invert? 0: gap), !isEmpty);
});
};
function doMultiAction(fn) {
var Document = Editor.ActiveDocument;
var Sel = Document.Selection;
if (Sel.Mode == null) { fn(); return; } //◆Mery 2 以前
BeginUndoGroup(); AddUndo();
if (Sel.Mode===meModeBox) {
Editor.ExecuteCommandById(2254); //範囲を行に分ける
if (Sel.Mode===meModeBox) {
EndUndoGroup(); Document.Undo();
Status = "マルチカーソルを有効にしてください"; return;
}
}
var len = Document.TextLength;
var sels = [], anc, act;
for (var i=0, n=Sel.Count||1; i<n; i++) {
anc = Sel.GetAnchorPos(i), act = Sel.GetActivePos(i);
sels[i] = {anc:anc-len, act:act-len}; //選択範囲をオフセットで記憶
}
Sel.Clear(); //選択解除
for (var i=0, s; s=sels[i]; i++) {
Sel.SetActivePos(s.act+len);
Sel.SetAnchorPos(s.anc+len); //シングル選択
fn(); //本処理
anc = Sel.GetAnchorPos(), act = Sel.GetActivePos();
sels[i] = {anc:anc, act:act}; //選択範囲を更新
len = Document.TextLength;
}
for (var i=0, s; s=sels[i]; i++) Sel.AddPos(s.anc, s.act); //選択範囲を復元
EndUndoGroup();
};
位取り対応[編集]
// 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; //★位取り対応
数値を増減.lib.js の内容を上記のように書き換えると、カーソル左側を基準に増減するようになります。
※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
※左端 千の位 百の位 十の位 一の位 ※範囲選択時 999 0000 900 990 999 999,999 1000 1000 1000 1000 1000 9100,1009 1001 2000 1100 1010 1001 9101,1019
スポンサーリンク