【Javascript】マクロで日付を1週間後にする(サクラエディタ)

プログラミング等

どうもこじらです。

今回はサクラエディタ用のマクロを作成したので、そのソースと実行方法をまとめていきたいと思います。

サクラエディタをインスコ

サクラエディタはフリーソフトにも関わらずキーマクロだけでなく、Javascriptで書かれたマクロも実行できる優れものです。

今回はこれをインストールした前提で話します。

Page not found · GitHub Pages

一応ですが、私が使用しているサクラエディタのバージョンは2.2.0.1です。

ソース

このマクロは、週次報告資料(週報)の提出の際に手動で書き換えている人にとっては割と役に立つと思います。

選択範囲の文章に含まれている”02/08″のような形式の文字列を1週間後の日付に置換します。”YYYY/MM/DD”の形式だと年数が変わらないので注意してください。

 

てか、JavascriptのDate型ってものすごく使いづらいんですね。

String→Dateの変換は楽ですが、日付の計算は不安定だし、Date→Stringの変換に至っては標準でのまともな機能がありません。まぁ、何かしらのライブラリ使えってことなのかな?

そのため、今回は全て手動で計算していますwwゴリゴリですw

 

dateReplace.js

// 日付を1週間後に置き換える(フォーマット:99/99)
function dateReplace(str00) {
  var i=0;
  var lines="";
  var str01="";
  var pattern="[0-1][0-9]/[0-3][0-9]";


  lines = str00.split(/\r/); 
  
  for (i in lines) {
    var beforeMD = String(lines[i].match(pattern));

    var month = beforeMD.substring(0,2)-0;
    var day = beforeMD.substring(3,5)-0;

    if (checkDate(month, day)) {
      var date = dateCulcurator(month, day);
      
      str01 += lines[i].replace(beforeMD, date);
    } else {
      str01 += lines[i];
    }
    
    if (lines[i].length === i) str01+="\r";
  }

  return(str01);

}

// 日付の正当性をチェックする
function checkDate(month, day) {

  if (12 < month || getLastDate(month) < day) {
    return false;
  }
  return true;
}

// 月の最終日を取得する
function getLastDate(month) {

  var lastDate = 31;
  if (month == 4
   || month == 6
   || month == 9
   || month == 11) {
      lastDate = 30;
    } else if (month == 2) {
      lastDate = getUruDate();
    }

    return lastDate;
}

// 閏年の判定を行い、2月分の日付を返却する
function getUruDate() {

  var uluFlg = false;
  var date = 28;
  
  if (year%4 == 0) uluFlug = true;
  if (year%100 == 0) uluFlug = false;
  if (year%400 == 0) uluFlug = true;

  if (uluFlug) date = 29;

  return date;
}

// 日付を7日加算する
function dateCulcurator (month, day) {

  var lastDate = getLastDate(month);

  day+=7;

  if (lastDate < day) {
    month+=1;
    day = day - lastDate;
  }
  if (12 < month) {
    month-=12;
  }

  return padding(month, day);
}

// 日付をゼロ埋めし、フォーマットに整形する
function padding(month, day) {
  month = ("0" + month).slice(-2);
  day = ("0" + day).slice(-2);

  return month + "/" + day;
}

//年次を合わせること。閏年の計算にしか使わないため、2月末までに合わせれば良い
var year = "2020";

// 本処理
var str00 = Editor.GetSelectedString(0);
if (str00 !== "") Editor.InsText(dateReplace(str00));

// 終了のアラート
var objWS = new ActiveXObject("WScript.Shell");
objWS.Popup("置き換え完了", 0, "info", 0);

懸念点1

置き換えたい文字列の改行コードが”\r”に一致しない場合、元の改行が崩れてしまう可能性があります。まぁその場合はCRLFで指定してあげれば大体上手くいくんじゃないですかね?

懸念点2

懸念点というか、年次の指定をソース内で書き換えなければいけない仕様がなんともナンセンスです。

年1だし大したマクロじゃないから我慢してw

使い方

超初心者でもわかるよう丁寧に使い方を説明します。

上にあるzipファイルを解凍、または空のjsファイルを作成し上記コードをコピペし、dateReplace.jsファイルを作成してください。

ファイル名は何でもいいですが、ここではdateReplace.jsという名前で扱います。

作成したdateReplace.jsを任意のフォルダに配置(保存)します。

そしたら、サクラエディタのメニューバーの[設定]→[共通設定]をクリックしてください。

そしたら、[マクロ]タブをクリック→[参照]で、さっきdateReplace.jsを配置したフォルダを参照させます。

今度は[File]のドロップダウンリストの下三角を選択し、dateReplace.jsを選択→[設定]→[OK]と進めてください。

あ、手順抜けてた。[名前]は好きな名前を入力してください。私は「時間の置換」と付けました。

これでひとまずの設定は終わりです。メニューバーの[ツール]→[登録済みマクロ]→[時間の置換]でマクロを実行できます。

……でも、どうせならショートカットに設定したいですよね!!!

再度[設定]→[共通設定]を開きます。

[キー割り当て]→[外部マクロ]→[時間の置換]→設定したいキー(今回はShift+Ctrl+Z)を指定→[割付]→[OK]

ここまで来たら完璧です。

[Ctrl+A]で文章を全選択→[Shift+Ctrl+Z]で置換の流れるようなコンボ。

 

バグあったら教えてもらえると嬉しいです。

こじらでした

じゃ

参考文献

サクラエディタ:JavaScriptでマクロ実装(置換編)複数行を一行毎に置換する

コメント

タイトルとURLをコピーしました