|
ユーザーのアルビレオです。
ちょっと気になったのですが、gettext(1,y,8,y)としていますが、gettextの場
合は左端は0なのでgettext(0,y,8,y)が意図した動作なのではないでしょうか。
それはそれとして、本題です。
appendcopyをしている行は必ず連続しているので、範囲選択を使ってコピーを一
回で済ませることができますね。
動作テストはしていませんが、こういうマクロを書けるならおかしなところがあ
っても修正できると思います。(^^;
gofiletop;
$fn=filename;
while(true){
$wbs1=gettext(0,y,8,y);
if (strlen($wbs1)==0) endmacro;
beginsel;
while(true){
down;
$wbs2=gettext(0,y,8,y);
if ($wbs1 != $wbs2) break;
}
endsel;
copy;
openfile "/h"+"";
paste;
saveas $wbs1+".csv";
setactivehidemaru findhidemaru($fn);
closehidemaru 1;
}
endmacro;
またgettextよりテキスト検索の方が低コストだと思われるので、こうするとも
っと高速化できると思います。
gofiletop;
$fn=filename;
while(true){
$wbs1=gettext(0,0,8,0);//常に先頭行を取得
if (strlen($wbs1)==0) endmacro;
gofileend;//テキスト末尾へ移動
setsearch $wbs1;//同じサーチを繰り返し行うので検索文字列の設定はここで
しておく
while(true){
searchup;//一致する最後の行を検索
if(x==0) break;//一致したのが行の先頭なら目的の行
}
down;
beginsel;//一致しない最初の行から
gofiletop;
endsel;//テキスト先頭までを選択
cut;//コピーではなくカット
openfile "/h"+"";
paste;
saveas $wbs1+".csv";
setactivehidemaru findhidemaru($fn);
closehidemaru 1;
}
endmacro;
さらに先頭8文字に正規表現で意味を持つ文字が含まれていないという前提があ
れば、
setsearch $wbs1;
while(true){
searchup;
if(x==0) break;
}
の部分を
searchup "^"+$wbs1;
に置き換えてループを減らせるのでかなり高速になるはずです。
|
|