Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


sakura-macro

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
sakura-macro [2022/01/20 09:45]
tanaka [visualize_pack.js]
sakura-macro [2022/02/01 10:31]
tanaka [visible_pack.js]
行 197: 行 197:
 ===== xsort.js ===== ===== xsort.js =====
 <sxh javascript;title:xsort.js> <sxh javascript;title:xsort.js>
-TODO+// ----------------------------------------------- 
 +// 複数キーのソート 
 +// [入力方法]{開始位置}:{文字長},{開始位置}:{文字長},asc desc 
 +// ----------------------------------------------- 
 + 
 +main(); 
 + 
 +function main() { 
 + 
 + // キー 
 + var input = Editor.InputBox('{開始位置}:{文字長},{開始位置}:{文字長},asc desc'); 
 + 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<inputWords.length-1; 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<=Editor.GetLineCount(0); i++){ 
 + var line = GetLineStr(i); 
 + 
 + var itemKeys = []; 
 + for(var j=0; j<keys.length; j++){ 
 + itemKeys[j] = line.substr(keys[j].pos-1, keys[j].len); 
 +
 + 
 + var objItem = new Item(i, itemKeys); 
 + items.push(objItem); 
 +
 + 
 + // ソート 
 + items.sort(function(a, b) { 
 + 
 + for(var i=0; i<a.key.length; i++){ 
 +  
 + if(a.key[i] !== b.key[i]) { 
 + if (a.key[i] < b.key[i]) { 
 + return (keys[i].order.toUpperCase() == 'DESC') ? 1 : -1; 
 +
 + if (a.key[i] > b.key[i]) { 
 + return (keys[i].order.toUpperCase() == 'DESC') ? -1 : 1; 
 +
 +
 +
 +  
 + return 0; 
 + }); 
 + 
 + var sortTxt = ''; 
 + for(var i=0; i<items.length; 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, key) { 
 + this.lineNo = lineNo; 
 + this.key = key; 
 +}
 </sxh> </sxh>
  
行 880: 行 969:
  
  return txt;  return txt;
-} 
-</sxh> 
- 
-\\ 
-===== visible_pack.js ===== 
-<sxh javascript;title:visible_pack.js> 
-// ----------------------------------------------- 
-// パック10進の可視化 
-// 選択されていなかったら全範囲する 
-// ----------------------------------------------- 
- 
-var jisArr = [ 
- ['ア','サ',' ','0','@','P','`','p','ナ','マ'], 
- ['イ','シ','!','1','A','Q','a','q','ニ','ミ'], 
- ['ウ','ス','"','2','B','R','b','r','ヌ','ム'], 
- ['エ','セ','#','3','C','S','c','s','ネ','メ'], 
- ['オ','ソ','$','4','D','T','d','t','ノ','モ'], 
- ['カ','タ','%','5','E','U','e','u','ハ','ヤ'], 
- ['キ','チ','&','6','F','V','f','v','ヒ','ユ'], 
- ['ク','ツ',"'",'7','G','W','g','w','フ','ヨ'], 
- ['ケ','テ','(','8','H','X','h','x','ヘ','ラ'], 
- ['コ','ト',')','9','I','Y','i','y','ホ','リ'] 
-]; 
- 
-main(); 
- 
-function main() { 
- 
- var isSelected = Editor.IsTextSelected(); 
- if(isSelected == 0) { 
- Editor.MessageBox('選択されていないので全テキストを選択します。'); 
- Editor.SelectAll(); 
- } 
- 
- var colFrom = GetSelectColumnFrom(); // 選択開始桁 
- var colTo = GetSelectColumnTo(); // 選択終了桁 
- var lineFrom = GetSelectLineFrom(); // 選択開始行 
- var lineTo = GetSelectLineTo(); // 選択終了行 
- // 選択範囲の文字列取得 
- var selectText = GetSelectedString(0); 
- 
- // 最後の改行削除 
- selectText = selectText.replace(/\r\n$/, ''); 
- 
- // 改行で分割 
- var selectArr = selectText.split('\r\n'); 
- 
- Editor.CancelMode(); 
- 
- for(var i=0; i<selectArr.length; i++){ 
- 
- var change = ''; 
- for(var j=0; j<selectArr[i].length; j++) { 
- 
- var hex  = ('00' + selectArr[i].charCodeAt(j).toString(16)).slice(-2); 
-  
- var top = hex.charAt(0); // 上位 
- var low = hex.charAt(1); // 下位 
-  
- if(isNaN(top)==0 && isNaN(low)==0) { 
- change += jisArr[low][top]; 
- }else{ 
- change += String.fromCharCode(parseInt(hex, 16)); 
- } 
- } 
- 
- // 範囲選択 
- Editor.MoveCursor(lineFrom + i, colFrom, 0); 
- if(colTo == 1) { 
- Editor.SelectLine(0); 
- Editor.Left_Sel(0); // 改行を選択範囲から削除 
- } else { 
- for(var col=colFrom; col < colTo; col++) { 
- Editor.Right_Sel(0); 
- } 
- } 
- 
- // 上書き 
- Editor.InsText(change); 
- } 
 } }
 </sxh> </sxh>
sakura-macro.txt · 最終更新: 2022/02/01 10:31 by tanaka