スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

秀丸マクロで表計算風の行ソートとか作ってた。

コードいじってると「こういうの欲しいなー」と思ってスクリプトとかマクロ組むのは常なわけですが
手順を楽にするために組んだはずのマクロに時間とられてしまう逆転現象ってありますよね。ありました。

//----------------------------------------------------------
// LineSortSSlike.mac
// 表計算風の行ソート ver.0.01 (2015/10/06)
// by uten_dev
//
// タブ区切りの同じ列の文字列同士を比較する行ソート。
// $delimiter の値で区切りの変更可能。
//----------------------------------------------------------
$macro_name = "表計算風の行ソート";

// 区切り文字列
$delimiter = "\t";
$delimiter_name = "タブ文字";


//--------------------------------------
//参照するセルを指定
#num = val( input($delimiter_name + "で区切られた文字列の何列目を比較するか指定してください。先頭は 1 です。", "1" ) );
if( #num == 0 ){
message "入力は数値で指定してください。";
exit;
}
//--------------------------------------


//--------------------------------------
// 範囲選択から行を配列 $lines に格納と
// 行数を #linemax に格納まで。
if(selecting == no){ // 範囲選択中ではない場合、範囲選択開始
inputpos "<" + $macro_name + ">開始位置を指定してください。";
beginsel;
inputpos "<" + $macro_name + ">終了位置を指定してください。";
}
cut; // 選択範囲切り取り
beginclipboardread; // クリップボード参照開始
#i = 0;
$buffer = getclipboard;
while($buffer != ""){
if( rightstr($buffer,1) == "\n" ){ //改行の除去
$buffer = midstr($buffer,0,strlen($buffer)-1);
}
$lines[#i] = $buffer;
$buffer = getclipboard;
#i = #i + 1;
}
#linemax = #i;
//--------------------------------------


//--------------------------------------
// 行ソート
#i = 1;
while(#i < #linemax){
#j = #linemax - 1;
while(#j > 0){
call SubCell $lines[#j-1], #num;
$left = $$return;
call SubCell $lines[#j], #num;
$right = $$return;

if($left > $right){
$temp = $lines[#j-1];
$lines[#j-1] = $lines[#j];
$lines[#j] = $temp;
}
#j = #j - 1;
}
#i = #i + 1;
}
//--------------------------------------
// 出力
#i = 0;
while(#i < #linemax){
insert $lines[#i] + "\n";
#i = #i + 1;
}
//--------------------------------------
// メイン終了
endmacro;
//--------------------------------------




//--------------------------------------
// サブルーチン
//--------------------------------------
// 文字列 $$1 をタブで区切った分割文字列の ##2 番目を返す。
SubCell:
$$str = "";
##len = strlen($$1);
##pos = 0;
##cell = 1; //分割された文字列の順
while( ##pos < ##len ){
##pos2 = strstr($$1,$delimiter,##pos); //次の区切り探索
if( ##cell == ##2 ){ //cell found
if( ##pos2 == -1 ){ //末尾まで
$$str = midstr($$1,##pos);
}else{
$$str = midstr($$1,##pos,##pos2 - ##pos);
}
break;
}
if( ##pos2 == -1 ){ //cell not found
$$str = "";
break;
}
##pos = ##pos2 + 1;
##cell = ##cell + 1;
}
return $$str;

スポンサーサイト

テーマ : プログラム - ジャンル : コンピュータ

Tag : 秀丸 秀丸マクロ プログラム

コメント

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。