このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン | 最新のリビジョン 両方とも次のリビジョン | ||
sakura-macro [2022/01/20 09:45] tanaka [visualize_pack.js] |
sakura-macro [2022/01/27 09:48] tanaka [xsort.js] |
||
---|---|---|---|
行 197: | 行 197: | ||
===== xsort.js ===== | ===== xsort.js ===== | ||
<sxh javascript; | <sxh javascript; | ||
- | TODO | + | // ----------------------------------------------- |
+ | // 複数キーのソート | ||
+ | // [入力方法]{開始位置}: | ||
+ | // ----------------------------------------------- | ||
+ | |||
+ | main(); | ||
+ | |||
+ | function main() { | ||
+ | |||
+ | // キー | ||
+ | var input = Editor.InputBox(' | ||
+ | if(!input) return; | ||
+ | |||
+ | var keys = []; | ||
+ | var inputWords = input.split(',' | ||
+ | var orderWords = inputWords[inputWords.length-1].split(' | ||
+ | if(inputWords.length - 1 == orderWords.length) { | ||
+ | for(var i=0; i< | ||
+ | |||
+ | var words = inputWords[i].split(':' | ||
+ | if(words.length == 2){ | ||
+ | var pos = 0; | ||
+ | var len = 0; | ||
+ | var order = ''; | ||
+ | |||
+ | pos = parseInt(words[0]); | ||
+ | len = parseInt(words[1]); | ||
+ | order = orderWords[i]; | ||
+ | |||
+ | var obj = new Key(pos, len, order); | ||
+ | keys.push(obj); | ||
+ | } | ||
+ | } | ||
+ | } else { | ||
+ | Editor.ErrorMsg(' | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // 行 | ||
+ | var items = []; | ||
+ | for(var i=1; i< | ||
+ | var line = GetLineStr(i); | ||
+ | |||
+ | var itemKeys = []; | ||
+ | for(var j=0; j< | ||
+ | itemKeys[j] = line.substr(keys[j].pos-1, | ||
+ | } | ||
+ | |||
+ | var objItem = new Item(i, itemKeys); | ||
+ | items.push(objItem); | ||
+ | } | ||
+ | |||
+ | // ソート | ||
+ | items.sort(function(a, | ||
+ | |||
+ | for(var i=0; i< | ||
+ | |||
+ | if(a.key[i] !== b.key[i]) { | ||
+ | if (a.key[i] < b.key[i]) { | ||
+ | return (keys[i].order.toUpperCase() == ' | ||
+ | } | ||
+ | if (a.key[i] > b.key[i]) { | ||
+ | return (keys[i].order.toUpperCase() == ' | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return 0; | ||
+ | }); | ||
+ | |||
+ | var sortTxt = ''; | ||
+ | for(var i=0; i< | ||
+ | sortTxt += GetLineStr(items[i].lineNo); | ||
+ | } | ||
+ | |||
+ | // 上書き | ||
+ | Editor.SelectAll(); | ||
+ | Editor.InsText(sortTxt); | ||
+ | } | ||
+ | |||
+ | function Key(pos, len, order) { | ||
+ | this.pos = pos; | ||
+ | this.len = len; | ||
+ | this.order = order; | ||
+ | } | ||
+ | |||
+ | function Item(lineNo, | ||
+ | this.lineNo = lineNo; | ||
+ | this.key = key; | ||
+ | } | ||
</ | </ | ||