アウトプット枠への出力No.08587
こさく さん 17/11/21 17:30
 
お世話になっております、こさくと申します。

アウトプット枠へ出力について難儀しております。
ご教示いただければ幸いです。

コンパイル結果(ファイル名:err)を以下のマクロでアウトプット枠に出そうとし
ています。
ファイル内容 err の例
..\ccc\ddd\eee\abc.c(2563)

です。
このファイルを出力すると"..\"部分がフルパスに展開されるのですが、\ 区切
りのない一つの文字列になりタグジャンプが出来ません。

"..\"には日本語も含んでいます。
マクロの何処を変更すれば良いでしょうか?

実は以前(2011年)、コンパイル結果のアウトプット出力と言う事でこちらで教え
ていただきました。
以前は、対象のディレクトリをファイルに書いておきそこから読み込むようにし
ていました。
プロジェクトが増えてファイル書換(マクロ実行)が手間になったのでカレントデ
ィレクトリのプロジェクトをコンパイルするように改修しました。
すると、上記の様になりタグジャンプが出来なくなったという流れです。

-------------------------
$cur_path = directory2;
#pos = strstr( $cur_path, "aaaaa" );
if ( #pos == -1 )       {
 // aaaaa が見つからないときは終了
 message "ディレクトリを確認";
 endmacro;
}
$src = leftstr( $cur_path, (#pos+6) );
$dir = $src + "bbbb\\";
$f_name = "err";

$err_file = $dir + $f_name;
#filesys = createobject( "Scripting.FileSystemObject" );
#file = callmethod_returnobj( #filesys, "OpenTextFile", $err_file, 1 );
$out = callmethod_returnstr( #file, "ReadAll" );
loaddll "HmJre.dll";
$rep = dllfuncstr( "ReplaceRegular",
    "\\.\\.\\\\",
    $out,
    0,
    $src,
    1 );
if( $rep != "" ) {
 $out = $rep;
}
freedll;

loaddll "HmOutputPane.dll";
#ret=dllfunc("Push",hidemaruhandle(0));
#n = dllfunc( "Output", hidemaruhandle(0), $out );
freedll;
----------------------------


判りにくいとは思いますが、以上よろしくお願いします。

[ ]
RE:08587 アウトプット枠への出力No.08588
秀丸担当 さん 17/11/22 08:05
 

おそらく問題としてはアウトプット枠のことというより、正規表現の置換で、
「\」を「\\」と表すべきところが、そうなっていないということになると思い
ます。
「..\」を「c:\folder」に置換するとしたら、
置換ダイアログでは正規表現で「\.\.\\」と「c:\\folder」と書きます。
ここの「c:\folder」の「\」を「\\」に変換する必要があります。

V8.54以降では簡単に変換するquoteという関数があります。
例えば以下のようにします。
フォルダ名最後の「\」が不足しているようなので+"\\"もしています。

$rep = dllfuncstr( "ReplaceRegular",
    "\\.\\.\\\\",
    $out,
    0,
    quote($src)+"\\",
    1 );


本来というか、本当はアウトプット枠には現在の基準となるフォルダがあって、
アウトプット枠の右上の▼ボタンより「状態...」を見ることで基準となるフォ
ルダがわかります。
ここがあっていれば、フルパスに変換しなくても「..\」そのままでもタグジャ
ンプできるのですが、マクロではここの指定ができませんでした。
マクロでも指定できるべきなので、できるようにしたいと思います。


あと、Push関数を使っているところがありますが、Pushは内容を退避して後で
Popで復元するためにあります。
おそらく内容をクリアするためだと思うので、そうだとしたら、以下のようにす
るといいと思います。

//#ret=dllfunc("Push",hidemaruhandle(0));
#h=dllfunc("GetWindowHandle",hidemaruhandle(0));
#ret=sendmessage(#h,0x111/*WM_COMMAND*/,1009,0);//1009=クリア

[ ]
RE:08588 アウトプット枠への出力No.08589
こさく さん 17/11/22 08:59
 
こさくです。
いつもながら素早く的確なご指摘どうもありがとうございます。

ご教示いただいた通りの修正で思うような結果を得ることが出来ました。

> おそらく内容をクリアするためだと思うので、そうだとしたら、以下のようにす
まさに仰るとおりの意図です。
重ねて感謝致します。

今後ともよろしくお願い致します。

[ ]