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

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
ウィキリンクの修正
MSY-07 (トーク | 投稿記録)
箇条書きのマークアップを修正、改行の修正
62行目: 62行目:
* 複数選択に試験対応(Mery 3.0.1 以降)。
* 複数選択に試験対応(Mery 3.0.1 以降)。
** 矩形選択に試験対応(要 ☑マルチ カーソルを有効にする)。
** 矩形選択に試験対応(要 ☑マルチ カーソルを有効にする)。
**: 複数選択化して(選択範囲を行に分けて)から処理します。
*** 複数選択化して(選択範囲を行に分けて)から処理します。
* Document.TextLength が使える場合は使うようにした(Mery 3.0.1 以降)。
* Document.TextLength が使える場合は使うようにした(Mery 3.0.1 以降)。
* 都合上、<b style="color:#c00;">Mery 3.0.0 は動作対象外</b>とした。
* 都合上、<b style="color:#c00;">Mery 3.0.0 は動作対象外</b>とした。
; 2016/02/28
; 2016/02/28
* (数値を増やす) 正規表現を ([0-8]?)(9*) → ([0-9])(9*) に一部変更。他微調整。
* (数値を増やす) 正規表現を ([0-8]?)(9*) → ([0-9])(9*) に一部変更。他微調整。
*: 空文字マッチが発生し、処理にムダができていたのを改善。
** 空文字マッチが発生し、処理にムダができていたのを改善。
* 文字数変化量を Document.Text.length の変化から算出するようにして単純化。
* 文字数変化量を Document.Text.length の変化から算出するようにして単純化。
* 数値の増減処理を変更(二段階 replace していた処理を一段階に)。
* 数値の増減処理を変更(二段階 replace していた処理を一段階に)。
174行目: 174行目:
   var bx = (px!==tx)? px: 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>
</syntaxhighlight>
* 数値を増減.lib.js の内容を上記のように書き換えると、カーソル左側を基準に増減するようになります。<br>※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
数値を増減.lib.js の内容を上記のように書き換えると、カーソル左側を基準に増減するようになります。
 
※カーソルが数字の左端にある場合/範囲選択時は、通常どおり増減します。
:{|class="wikitable" style="text-align:center;"
:{|class="wikitable" style="text-align:center;"
! ※左端 !! 千の位 !! 百の位 !! 十の位 !! 一の位 !! ※範囲選択時
! ※左端 !! 千の位 !! 百の位 !! 十の位 !! 一の位 !! ※範囲選択時

2024年9月1日 (日) 18:46時点における版

概要

カーソル付近 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

ダウンロード

ファイル:数値を増減.zip

内容
  • 数値を減らす.ico
  • 数値を減らす.js
  • 数値を増やす.ico
  • 数値を増やす.js
  • 数値を増減.lib.js

更新履歴

2020/05/17
  • ダウンロード版を追加。
  • 数値を増減.lib.js にコードの共通部をまとめ、#include する仕様に変更。
  • 複数選択に試験対応(Mery 3.0.1 以降)。
    • 矩形選択に試験対応(要 ☑マルチ カーソルを有効にする)。
      • 複数選択化して(選択範囲を行に分けて)から処理します。
  • Document.TextLength が使える場合は使うようにした(Mery 3.0.1 以降)。
  • 都合上、Mery 3.0.0 は動作対象外とした。
2016/02/28
  • (数値を増やす) 正規表現を ([0-8]?)(9*) → ([0-9])(9*) に一部変更。他微調整。
    • 空文字マッチが発生し、処理にムダができていたのを改善。
  • 文字数変化量を Document.Text.length の変化から算出するようにして単純化。
  • 数値の増減処理を変更(二段階 replace していた処理を一段階に)。
2014/06/19
  • 非選択時、探索終了位置(bx)の算出方法を変更。
  • 数値の増減処理を変更(繰り上げ・繰り下げの場合分けを不要に)。
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
スポンサーリンク