🌸
[sakura macro]編集中のファイルの最終行に、簡易テンプレートで生成した行を挿入する
[sakura macro]編集中のファイルの最終行に、簡易テンプレートで生成した行を挿入する: insert_memoLine.jse
overview
- sakura editor歴、15年以上の私が使っているMacroを公開する。
- System Engineerにとって、さらっと使えるマクロなので、興味がある方はご利用を。
environment
- サクラエディタ Ver. 2.2.0.1
- Marco environment : WSH(Windows Script Host) / JScript
Gist
-
サクラエディタ マクロ掲示板
Script
- script folder : G:\Users\user name\AppData\Roaming\sakura
- script file name : insert_memoLineWithTemplate.jse
(function(){
///////////////////////////////////////
// here-string CRLF
// ↓↓↓↓↓↓↓↓↓
var herestrings = function(){
/*
## memo : yy/MM/dd(ddd)hh:mm :
- CLIP
*/
}
function replace_all(string, target, replacement) {
var result = "";
var offset = 0;
var target_length = target.length;
if (target_length === 0) {
for (var i = 0, c = string.length; i < c; i++) {
result += string[i];
result += replacement;
}
if (result.length)
return result.substr(0, result.length - replacement.length);
return result;
}
do {
var i = string.indexOf(target, offset);
if (i === -1) {
result += string.substring(offset);
return result;
}
result += string.substring(offset, i);
result += replacement;
offset = i + target_length;
} while (true);
}
function get_template(sep){
sep = sep || '\r\n';
var template = herestrings.toString().split(sep).slice(2,-2).join(sep);
return template;
}
function merge_map(template, map_){
var merged = template;
for(key_ in map_){
if(map_.hasOwnProperty(key_)){
var value_ = map_[key_];
merged = replace_all(merged, '{{' + key_ + '}}', value_);
}
};
return merged;
}
var get_dateMap = function(dtm){
var retMap = {};
retMap.YYYY = '' + dtm.getFullYear();
retMap.yy = retMap.YYYY.slice(-2);
retMap.MM = ('0' + (dtm.getMonth() + 1)).slice(-2);
retMap.dd = ('0' + dtm.getDate()).slice(-2);
retMap.hh = ('0' + dtm.getHours()).slice(-2);
retMap.mm = ('0' + dtm.getMinutes()).slice(-2);
retMap.ss = ('0' + dtm.getSeconds()).slice(-2);
retMap.DDD = get_dayString(dtm);
retMap.aaaa = get_dayString(dtm, 0);
return retMap;
}
var convertTo_statement =function(format){
var statement = format;
var aryForKey = ['yyyy', 'yy', 'MM', 'dddd', 'ddd', 'dd', 'hh', 'mm', 'ss','CLIP'];
var aryForVal = ['{{YYYY}}', '{{yy}}', '{{MM}}', '{{aaaa}}', '{{DDD}}', '{{dd}}', '{{hh}}', '{{mm}}', '{{ss}}','{{clip_text}}'];
for(var i in aryForKey){
var key_ = aryForKey[i];
var val_ = aryForVal[i];
statement = replace_all(statement, key_, val_);
}
return statement;
}
var get_dayString = function(dtm,num){
if(typeof(num) === 'undefined') num=3;
var aryDay = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var dw = dtm.getDay();
var ret = aryDay[dw];
//WScript.Echo(ret);
if(num){
ret = ret.substr(0, num);
}
return ret;
}
function doProcess(){
var dtm = new Date();
var template = get_template();
// merge template
var map_ = get_dateMap(dtm);
map_.clip_text = Editor.GetClipboard(0);
var converted_template = convertTo_statement(template);
//// Editor.TraceOut(converted_template);
var merged_template = merge_map(converted_template, map_);
//// Editor.TraceOut(merged_template);
// screen operation
Editor.GoFileEnd(0);
Editor.InsText(merged_template);
Editor.Left(0);
}
// -------------- entry point
if(typeof(Editor) !== 'undefined'){
doProcess();
} else {
if(typeof(WScript) !== 'undefined'){
WScript.Echo('This script is for sakura macro.');
} else {
console.log('This script is for sakura macro.');
}
}
}())
note
functions
- Main process
- doProcess() // main process
- Sub function
- get_template() // herestrings()よりTemplate文字列を取得
- get_dateMap() // 日付データをマップで取得
- get_dayString()
- convertTo_statement() // templateをMerge用templateに変換
- merge_map() // MapデータをもとにTemplateをMerge
- replace_all()
template strings
- herestrings()関数に、記述する。以下、記述例。「/」「/」の間の行がテンプレート文字列となる。
///////////////////////////////////////
// here-string CRLF
// ↓↓↓↓↓↓↓↓↓
var herestrings = function(){
/*
## memo : yy/MM/dd(ddd)hh:mm :
- CLIP
*/
}
- Templateで使われる予約文字列
- 'yyyy' :年4桁 2021
- 'yy' :年2桁 21
- 'MM' :月2桁 06
- 'dddd' :曜日 Monday
- 'ddd' :曜日 Mon
- 'dd' :日付2桁 01
- 'hh' :時2桁
- 'mm' :分2桁
- 'ss' :秒2桁
- 'CLIP' :クリップボードから取得した文字列
links
- [sakura macro] sakura editor で編集中ファイルのあるフォルダをExplorerで開く:open_explorer.jse
- [sakura macro] sakura editor で編集中ファイルのあるフォルダをPowershellで開く:open_powershell.jse
// --- End of markdown
Discussion