ファイル名を取得して、ファイル内を置換No.03738
yamasan さん 03/05/22 18:37
 
yamasanと申します。以前から、折に触れて、
質問しています。スイマセンが、お願い申し上げます。

具体的に申しますと、今回の相談は、

フォルダ内にある全てのHTMLファイル
(拡張子は、.htm もしくは .html です)から
拡張子を取り除いたファイル名を取り出し、
HTMLファイル内に挿入したいのです。どうにかお願いできませんでしょうか?

今回の例では、フォルダ下のファイル内の
  <!-- End of Image -->
を検索し、

  <!-- End of Image -->
  <tr align="center" valign="middle">
    <td bgcolor="#E4FFE4" align="center" colspan="2">
    ファイル名
    </td>
  </tr>
に置換したいのです。

マクロライブラリを見ました。
ひろさん作「複数ファイルにマクロ実行 Ver.1.03」
を使いたいのですが、マクロでファイル名を取得できません。

作成したマクロは、キー操作の保存で作りました。
以下のような物です。
--------------
replacedown "  <!-- End of Image -->" , "  <!-- End of Image -->\\n  <tr ali
gn=\"center\" valign=\"middle\">\\n    <td bgcolor=\"#E4FFE4\" align=\"cente
r\" colspan=\"2\">\\n    <font color=\"#000000\">ファイル名</font>\\n    </t
d>\\n  </tr>" , regular;
if( ! result )  beep;
--------------
ファイル名を取得する書き方をお願い申し上げます。

[ ]
RE:03738 ファイル名を取得して、ファイルNo.03739
舩橋幸雄 さん 03/05/22 19:05
 
舩橋です。"秀まるおのマクロサーバ"の"ファイルサービス"にあるファイル一覧取得
の機能を使用されてはどうでしょうか?
"秀まるおのマクロサーバ"のインストールが必要になりますが。

>yamasanと申します。以前から、折に触れて、
>質問しています。スイマセンが、お願い申し上げます。
>
>具体的に申しますと、今回の相談は、
>
>フォルダ内にある全てのHTMLファイル
>(拡張子は、.htm もしくは .html です)から
>拡張子を取り除いたファイル名を取り出し、
>HTMLファイル内に挿入したいのです。どうにかお願いできませんでしょうか?
>
>今回の例では、フォルダ下のファイル内の
>  <!-- End of Image -->
>を検索し、
>
>  <!-- End of Image -->
>  <tr align="center" valign="middle">
>    <td bgcolor="#E4FFE4" align="center" colspan="2">
>    ファイル名
>    </td>
>  </tr>
>に置換したいのです。
>
>マクロライブラリを見ました。
>ひろさん作「複数ファイルにマクロ実行 Ver.1.03」
>を使いたいのですが、マクロでファイル名を取得できません。
>
>作成したマクロは、キー操作の保存で作りました。
>以下のような物です。
>--------------
>replacedown "  <!-- End of Image -->" , "  <!-- End of Image -->\\n  <tr al
>ign=\"center\" valign=\"middle\">\\n    <td bgcolor=\"#E4FFE4\" align=\"cen
>ter\" colspan=\"2\">\\n    <font color=\"#000000\">ファイル名</font>\\n    
></td>\\n  </tr>" , regular;
>if( ! result )  beep;
>--------------
>ファイル名を取得する書き方をお願い申し上げます。

[ ]
RE:03739 ファイル名を取得して、ファイルNo.03740
yamasan さん 03/05/23 08:40
 
おはようございます。yamasanです。
舩橋さん、ありがとうございました。

現在、"秀まるおのマクロサーバ"のヘルプを読んでいます。
まだ、利用方法がよく分かりませんが、
頑張ってみます。解決したら、投稿します。
どうも、ありがとうございました。

>舩橋です。"秀まるおのマクロサーバ"の"ファイルサービス"にあるファイル一覧取
>得の機能を使用されてはどうでしょうか?
>"秀まるおのマクロサーバ"のインストールが必要になりますが。

[ ]
RE:03740 ファイル名を取得して、ファイルNo.03741
舩橋幸雄 さん 03/05/23 09:04
 
おはようございます。舩橋です。
私が機能を理解するために作ったマクロです。(参考まで)
このマクロを実行すると、そのときアクティブなファイルに指定されたフォルダ内の
ファイルの一覧が出力されます。
※注意点
  ・エラー処理は入っていません。
  ・フォルダの選択に「田楽DLL」を使用しています。「田楽DLL」はマクロ
    ライブラリに登録されています。(私のではありません)
======ここから=========
run "macserv.exe /h";
ddeinitiate "HideMacroServer", "FileService";
$curdir = dderequest( "getcurdir" );
ddeexecute "exit";

loaddll "DengakuDll";
$dir1 = dllfuncstr("GETDIRNAMEEX",hidemaruhandle(0),"フォルダを指定して下さ
い",$curdir,1);
if( $dir1=="" ){
   freedll;
   endmacro;
}
freedll;

run "macserv.exe /h";
ddeinitiate "HideMacroServer", "FileService";
//ddeexecute "setcurdir c:\\";
ddeexecute "setcurdir \x22"+$dir1+"\x22";
//ddeexecute "setcurdir C:\\Program Files";
$curdir = dderequest( "getcurdir" );
ddeexecute "enumfile *.*";

insert "#"+$dir1+";"+$curdir;
insertreturn;

#i = 0;
while(1) {
$name[#i] = dderequest( "findnext" );
if( $name[#i] == "" ) break;
insert $name[#i];
insertreturn;
#i = #i + 1;
}

ddeexecute "enumdir *.*";

#i = 0;
while(1) {
$dirname[#i] = dderequest( "findnext" );
if( $dirname[#i] == ""  ) break;
                if( $dirname[#i] == "." ) continue;
                if( $dirname[#i] == "..") continue;
insert $dir1 +"\\" + $dirname[#i];
insertreturn;
#i = #i + 1;
}

#i = 0;
#j = 0;
while(1) {
if( $dirname[#i] == "" ) break;

ddeexecute "exit";
run "macserv.exe /h";
ddeinitiate "HideMacroServer", "FileService";
ddeexecute "setcurdir "+$dir1+"\\"+$dirname[#i];
ddeexecute "enumfile *.*";
while(1) {
$name[#j] = dderequest( "findnext" );
if( $name[#j] == "" ) break;
insert $dirname[#i]+"\\"+$name[#j];
insertreturn;
#j = #j + 1;
}
#i = #i + 1;
}
ddeexecute "exit";
======ここまで=========
>おはようございます。yamasanです。
>舩橋さん、ありがとうございました。
>
>現在、"秀まるおのマクロサーバ"のヘルプを読んでいます。
>まだ、利用方法がよく分かりませんが、
>頑張ってみます。解決したら、投稿します。
>どうも、ありがとうございました。
>
>>舩橋です。"秀まるおのマクロサーバ"の"ファイルサービス"にあるファイル一覧取
>得の機能を使用されてはどうでしょうか?
>>"秀まるおのマクロサーバ"のインストールが必要になりますが。

[ ]
RE:03738 ファイル名を取得して、ファイルNo.03742
ENCODINGSHIFTJIS さん 03/05/23 13:54
 
処理の方針として
>  <!-- End of Image -->
>を【 Grep 】してファイル一覧を取得したほうが正確では

[ ]
RE:03742 ファイル名を取得して、ファイルNo.03744
ひろ さん 03/05/23 18:40
 
 yamasan さん今日は、ひろです。
 既に他の方が指摘されていますが、別解です。

> 処理の方針として
> >  <!-- End of Image -->
> >を【 Grep 】してファイル一覧を取得したほうが正確では
 これを具体的に記すと、
grep ".|\\n", "*.htm", ".", regular, filelist;
replaceallfast "\\.(H|h)(T|t)(M|m)(L|l)?\\(1\\)$", "", regular;
といった要領です。ただし空のファイルは取りこぼすという欠点があります。

 またこれら以外に、サブフォルダを含まないなら、
$cmd = getenv("COMSPEC");
run $cmd + " /c dir /b \"" + $dir + "\" > con";
でファイル一覧を取得する手も有ります。

[ ]
RE:03744 ファイル名を取得して、ファイルNo.03745
yamasan さん 03/05/24 13:21
 
こんにちは。yamasanです。お世話になっています。
舩橋さん、ENCODINGSHIFTJIS さん、ひろさん、ありがとうございます。

ひろさんの、ご説明で少し分かりました。

> これを具体的に記すと、
>grep ".|\\n", "*.htm", ".", regular, filelist;
>replaceallfast "\\.(H|h)(T|t)(M|m)(L|l)?\\(1\\)$", "", regular;
>といった要領です。ただし空のファルは取りこぼすという欠点があります。

これを、grep.macとしました。
そして実行しました。確かに、ファイルの一覧が出力されます。
大変すばらしいです。(空のファイルは考慮しなくても良いので。)

ではありますが、お恥ずかしいのですが、
これをどう利用するのでしょうか?
さっぱり分かりません。お恥ずかしい次第ですが、正直な気持ちです。

実は、以前に、
kakasiさん(間違っていたら、ごめんなさい)だったと思いますが、
教えて頂いたマクロがあります。(最後に、記します。)

フォルダ内の全てのファイルを検索し、置換する物です。
大変重宝しています。これを利用しようと思ったが出来ないので、
色々、考えている所です。このマクロを利用できないかなとも考えてます。

このように、あまり分からない人間なので、
ご迷惑をおかけし恐縮ですが、お構い無ければ、お教えください。
どうぞ、お願いします。

--------------
//目的のファイルを一つ開いて実行する
#starttime = tickcount;
#handle_1 = hidemaruhandle( 0 );
grep ".+", "*.*", ".", regular, icon, filelist;
    //文字が1字以上あるファイルのリストを作る
    //もっと限定できる文字列を書いてもよい
#n = result;
replaceallfast "\\([0-9]+\\)$", "", regular;
    //行番号を削除
gofiletop;
#i = 1;
while( #i <= #n ) {
    $file[#i] = gettext( 0, y, linelen, y );
        //2行以上にわたる長いファイル名があれば別の書き方が必要ですが。
    down;
    #i = #i + 1;
}
#handle_g = hidemaruhandle( 0 );
changename "grep.tmp";
closehidemaruforced #handle_1;
#i = 1;
while( #i <= #n ) {
    openfile "/h " + $file[#i];
    #handle[#i] = hidemaruhandle(0);
    if(#i > 1) closehidemaruforced #handle[#i - 1];
    call Replace;
    save;
    #i = #i + 1;
}
closehidemaruforced #handle_g;
#time = tickcount - #starttime;
message "終わりました\n" + str(#time/1000) + " 秒かかりました";
endmacro;

Replace:    //処理
replaceallfast "検索_01", "置換_01", regular;
replaceallfast "検索_02", "置換_02", regular;
replaceallfast "検索_03<", "置換_03", regular;
return;

[ ]
RE:03745 ファイル名を取得して、ファイルNo.03746
ENCODINGSHIFTJIS さん 03/05/26 13:13
 
`>フォルダ内の全てのファイルを検索し、置換する物です。
>大変重宝しています。これを利用しようと思ったが出来ないので、

なぜ?
置換結果を複数行には、 ¥n と 正規表現on でできてます。
ファイル指定や、面の開き閉じは十分に確認が必要ですが
スジは、サンプルのマクロでできてます。

[ ]
RE:03745 ファイル名を取得して、ファイルNo.03747
ひろ さん 03/05/26 17:13
 
 yamasan さん今日は、ひろです。
> これをどう利用するのでしょうか?
 質問に対して質問で帰します。あなたは元々どの様に利用したくて、ファイ
ル名を取得したかったのですか? 私は、最初の
> ファイル名を取得する書き方をお願い申し上げます。
に対してはお答えしているので、どう利用するかはあなた次第です。

 おそらく yamasan さんの質問の意図は、上記のようなことではないと思い
ますが、何が解らないのか具体的に書いてください。もし
> これをどう利用するのでしょうか?
の意味が、``この取得したファイル名を「<!-- End of Image -->」と書き込
んであるファイルにどの様に挿入するのか?'' ということであれば、
hidemaruhandle, setactivehidemaru を使ったウィンドウの切り替えと、copy,
paste を組み合わせる等、やり方は色々有ります。

[ ]
RE:03747 ファイル名を取得して、ファイルNo.03749
yamasan さん 03/05/26 19:30
 
ENCODINGSHIFTJISさん、ひろさん、ありがとうございました。

どうも、質問が悪くてスイマセン。
ひろさんの、仰るとおりのことなのですが、
もう一度、書かせて頂きます。本当に、申し訳ありませんです。

>の意味が、``この取得したファイル名を「<!-- End of Image -->」と書き込
>んであるファイルにどの様に挿入するのか?'' ということであれば、
>hidemaruhandle, setactivehidemaru を使ったウィンドウの切り替えと、copy,
>paste を組み合わせる等、やり方は色々有ります。

例えは悪いですが、混乱しそうなので最初の例え通りに書かせて頂きます。

ファイル名が、sample01.htmの場合、
"<!-- End of Image -->"を検索して、置換した結果が、

<!-- End of Image -->
<tr align="center" valign="middle">
<td bgcolor="#E4FFE4" align="center" colspan="2">
sample01
</td>
</tr>

に、なって欲しいのです。

sample02.htmの場合は、結果が、

<!-- End of Image -->
<tr align="center" valign="middle">
<td bgcolor="#E4FFE4" align="center" colspan="2">
sample02
</td>
</tr>

となって欲しいです。
マクロは、
--------------
rep ".|\\n", "*.htm", ".", regular, filelist;
replaceallfast "\\.(H|h)(T|t)(M|m)(L|l)?\\(1\\)$", "", regular;

replacedown "<!-- End of Image -->" , "<!-- End of Image -->\\n<tr align=\"c
enter\" valign=\"middle\">\\n<td bgcolor=\"#E4FFE4\" align=\"center\" colspa
n=\"2\">\\n<font color=\"#000000\">ファイル名</font>\\n</td>\\n</tr>" , regu
lar;
if( ! result ) ?beep;
--------------
というモノのファイル名の箇所を変更したらいいのでしょうか。
マクロのヘルプを私なりに眺めても、解答に近づきません。
全てをお尋ねするのは厚かましいとは思いますが、どうぞ、お願い申し上げます。

[ ]
RE:03749 ファイル名を取得して、ファイルNo.03750
ひろ さん 03/05/26 20:02
 
 yamasan さん今日は、ひろです。
> ファイル名が、sample01.htmの場合、
> "<!-- End of Image -->"を検索して、置換した結果が、
>
> <!-- End of Image -->
> <tr align="center" valign="middle">
> <td bgcolor="#E4FFE4" align="center" colspan="2">
> sample01
> </td>
> </tr>
>
> に、なって欲しいのです。
 これで解りました。
> ひろさん作「複数ファイルにマクロ実行 Ver.1.03」
> を使いたいのですが、マクロでファイル名を取得できません。
と次のマクロを組み合わせてください。

//検索状態を保持と検索ヒット時の設定
#reg_search = searchmode;
$search = searchbuffer;
#search = searchoption;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "SelectFound",1;
envchanged;
closereg;
//実際の置き換え部分
gofiletop;
searchdown2 "<!-- End of Image -->";
if(!result)endmacro;
moveto selendx, selendy;
insert "\n";
insert "<tr align=\"center\" valign=\"middle\">\n" +
  "<td bgcolor=\"#E4FFE4\" align=\"center\" colspan=\"2\">\n"
  + basename + "\n";
replaceup filetype, "";
movetolineno column + 1, lineno;
insert "\n</td>\n</tr>\n";

//検索を初期状態に戻す
if( !#reg_search ){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}
setsearch $search, #search;

[ ]
RE:03750 ファイル名を取得して、ファイルNo.03751
yamasan さん 03/05/27 19:04
 
ひろさん、こんばんは。yamasanです。

> これで解りました。
>> ひろさん作「複数ファイルにマクロ実行 Ver.1.03」
>> を使いたいのですが、マクロでファイル名を取得できません。
>と次のマクロを組み合わせてください。

希望が叶いました。
batchmac1.macと組み合わせることで、解決しました。

本当に、ありがとうございました。
無理難題を申し上げて、申し訳ありませんでした。
感謝いたします。重ねて、ありがとうございました。

[ ]