メインメニューを開く
ホーム
ヘルプ
よくある質問
マクロリファレンス
マクロライブラリ
プラグインライブラリ
構文ファイル
テーマ
寄付・開発支援
開発室
開発者のブログ
ログイン
設定
MeryWiki について
免責事項
MeryWiki
検索
「
数値を増減
」を編集中
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
== 概要 == カーソル付近 or 選択範囲に半角数字列があれば 1 増やし/減らします。 * カーソル位置は、数字の左端・中間・右端どこでもかまいません。範囲選択時は、範囲内のみが対象となります。 :{|class="wikitable" style="text-align:center;" ! !! 左端 !!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;" !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|数値を増減.zip]] ; 内容 * 数値を減らす.ico * 数値を減らす.js * 数値を増やす.ico * 数値を増やす.js * 数値を増減.lib.js == 更新履歴 == ; 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>とした。 ; 2016/02/28 * (数値を増やす) 正規表現を ([0-8]?)(9*) → ([0-9])(9*) に一部変更。他微調整。 *: 空文字マッチが発生し、処理にムダができていたのを改善。 * 文字数変化量を Document.Text.length の変化から算出するようにして単純化。 * 数値の増減処理を変更(二段階 replace していた処理を一段階に)。 ; 2014/06/19 * 非選択時、探索終了位置(bx)の算出方法を変更。 * 数値の増減処理を変更(繰り上げ・繰り下げの場合分けを不要に)。 ; 2014/06/17 * 初版公開。 == ソースコード == === 数値を増やす.js === <syntaxhighlight lang="javascript"> #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"> #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"> 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(); }; </syntaxhighlight> == 位取り対応 == <syntaxhighlight lang="javascript"> // 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 の内容を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。 :{|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> |}
編集内容の要約:
MeryWikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MeryWiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の数式を計算してその答えを欄に入力してください (
ヘルプ
):
いちたすには =
編集を中止
編集の仕方
(新しいウィンドウで開きます)
スポンサーリンク