テキストの結合No.23585
YU さん 07/09/13 12:53
 
いつも大変お世話になっております。

insertfile "1.txt";
insertfile "2.txt";
insertfile "3.txt";
insertfile "4.txt";

上記のようにデータ名が簡単に作成できるものだと結合しやすいですが、データ名が
バラバラの場合はどのようなマクロになりますでしょうか?

insertfile ".+.txt";

もちろん上記では実行不可でした。
みなさまよろしくお願いします。

[ ]
RE:23585 テキストの結合No.23587
ENCODINGSHIFTJIS さん 07/09/13 14:16
 
ファイル操作なら、専用の便利ソフト・アドイン 探したほうがいいかも、
秀丸をファイラー風に仕立てるにしても、専用にはかないません。

ファルダ内の ファイル名列挙
ファイル選択・ソート
それを、
マクロのソースに加工して実行になりますが。

秀丸の マクロライブラリ を 「ファイル」で検索すると
参考になるかもしれません

[ ]
RE:23585 テキストの結合No.23588
秀丸担当 さん 07/09/13 14:54
 

>いつも大変お世話になっております。
>
>insertfile "1.txt";
>insertfile "2.txt";
>insertfile "3.txt";
>insertfile "4.txt";
>
>上記のようにデータ名が簡単に作成できるものだと結合しやすいですが、データ名が
>バラバラの場合はどのようなマクロになりますでしょうか?
>
>insertfile ".+.txt";
>
>もちろん上記では実行不可でした。
>みなさまよろしくお願いします。

ファイルの列挙などは、秀まるおのマクロサーバを使ってもらうということにな
っていますが、使っている人はあまりいないようで、田楽サーバ・田楽DLLを使
っている人が多いようです。

grep文を使ってファイルの一覧を出して、出力されたテキストを元にファイルの
存在を知るのが手っ取り早いです。

  grep ".", "*.txt", ".", regular, filelist;

出力された後、さらにテキストを読み取るマクロが面倒ですが。

コマンドラインのcopyコマンドを使うともっと手っ取り早いです。
run "cmd.exe /c copy *.txt output.xxx";
openfile "output.xxx";


[ ]
RE:23585 テキストの結合No.23591
アルビレオ さん 07/09/13 15:03
 
ユーザーのアルビレオです。

>いつも大変お世話になっております。
>
>insertfile "1.txt";
>insertfile "2.txt";
>insertfile "3.txt";
>insertfile "4.txt";
>
>上記のようにデータ名が簡単に作成できるものだと結合しやすいですが、データ名が
>バラバラの場合はどのようなマクロになりますでしょうか?
>
>insertfile ".+.txt";
>
>もちろん上記では実行不可でした。
>みなさまよろしくお願いします。

バラバラのファイル名を自動で結合しても、意図した順番になってくれないので
どうしても手作業は必要だと思いますが…

単にファイル名を列挙するだけなら、
run "cmd /c \"dir /b フォルダパス\\*.txt\" >con";
とすれば、新規ウィンドウにファイル名リストを出力できます。
多少は楽になるでしょう。

[ ]
RE:23585 テキストの結合No.23592
白雲斎 さん 07/09/13 17:47
 
こんにちは“YU”さん、白雲斎です。

双方とも、対象フォルダのファイル上でマクロ実行のこと。


対象ファイルのエンコードが

Shift_JIS限定なら:
------------------------------------------------------------
$output = "merge.txt";
runsync getenv("ComSpec") + " /c copy *.txt " + $output;
openfile $output;
endmacro;
------------------------------------------------------------


Shift_JIS以外か、統一されていない場合:
 ※エンコードの自動判定が上手くいかなかった場合の検証なし
------------------------------------------------------------
$sb = searchbuffer;
#so = searchoption;
$rb = replacebuffer;
openfile "/h /gCWrZUoF,\"*.txt\",.";
if( linecount2 <= 2 ) quit;
replaceallfast "\\([0-9]+\\)$", "", regular, nohilight;
gofiletop;
#i = 0;
while( code != eof )
{
    $fnames[#i] = gettext2(0, lineno, linelen2, lineno);
    #i = #i + 1;
    movetolineno 1, lineno + 1;
}
selectall;
delete;
#j = 0;
while( #j < #i )
{
    insertfile $fnames[#j];
    if( code == eof ) insert "\n";
    #j = #j + 1;
}
gofiletop;
changename "";
showwindow 1;
setsearch $sb, #so;
setreplace $rb;
SAVEAS;
endmacro;
------------------------------------------------------------

[ ]
RE:23592 テキストの結合No.23593
白雲斎 さん 07/09/13 18:02
 
白雲斎です。

ミスりました! 訂正します。

>Shift_JIS以外か、統一されていない場合:
> ※エンコードの自動判定が上手くいかなかった場合の検証なし
------------------------------------------------------------
$sb = searchbuffer;
#so = searchoption;
$rb = replacebuffer;
openfile "/h /gCWrZUoF,\"*.txt\",.";
if( linecount2 <= 2 ) quit;
replaceallfast "\\([0-9]+\\)$", "", regular, nohilight;
gofiletop;
#i = 0;
while( code != eof )
{
    $fnames[#i] = gettext2(0, lineno, linelen2, lineno);
    #i = #i + 1;
    movetolineno 1, lineno + 1;
}
selectall;
delete;
#j = 0;
while( #j < #i )
{
    insertfile $fnames[#j];
    if( linelen2 ) insert "\n";
    #j = #j + 1;
}
gofiletop;
changename "";
showwindow 1;
setsearch $sb, #so;
setreplace $rb;
SAVEAS;
endmacro;
------------------------------------------------------------

[ ]
RE:23593 テキストの結合No.23595
YU さん 07/09/13 20:34
 
みなさま本当にありがとうございます。

いまから全部テスト実行してみます。

とりあえず先にお礼を言いたくて返信しました!

ありがとうございます!

[ ]
RE:23592 テキストの結合No.23597
白雲斎 さん 07/09/14 09:21
 
白雲斎です。

間違った情報を伝えたようです。

copy *.txt merge.txt

は、エンコードがShift_JISでなくとも、統一されていれば問題なくコピーされ
るようです。
お詫びして、訂正します。

[ ]
RE:23597 テキストの結合No.23598
YU さん 07/09/14 10:42
 
白雲斎さまいつも本当にありがとうございます。
いくつか質問させて下さい。

------------------------------------------------------------
$output = "merge.txt";
runsync getenv("ComSpec") + " /c copy *.txt " + $output;
openfile $output;
endmacro;
------------------------------------------------------------

念の為の確認ですが
上記のマクロはエンコードがShift_JISでなくとも、統一されていれば問題なくコ
ピーされるということですね。
秀丸は先に保存しないでよくて、merge.txtが保存名として新たに作成されるという
ことですね。

質問です。
文章コピーの順番は何か決まり事がありますか?

[ ]
RE:23598 テキストの結合No.23602
秀丸担当 さん 07/09/14 15:18
 

>念の為の確認ですが
>上記のマクロはエンコードがShift_JISでなくとも、統一されていれば問題なくコ
>ピーされるということですね。
>秀丸は先に保存しないでよくて、merge.txtが保存名として新たに作成されるという
>ことですね。

UTF-8かUTF-16でBOMが付いている場合は、ファイル先頭にバイトオーダーを示す
コードが2〜3バイト入っているので、これを含めてcopyコマンドで結合すると
途中にゴミが入ることになると思います。
Shift-JIS,EUCであれば大丈夫です。
JISはエスケープが閉じていないと、途中から文字化けする可能性もあります。


>質問です。
>文章コピーの順番は何か決まり事がありますか?

たぶんファイルシステムによると思います。
NTFSだとアルファベット順になるようですが、それが確かかどうかはわかりませ
ん。
古いファイルシステムだとファイルが作られた順番になるかもしれません。

[ ]
RE:23602 テキストの結合No.23606
白雲斎 さん 07/09/14 17:34
 
こんにちは“秀丸担当”さん、白雲斎です。

>UTF-8かUTF-16でBOMが付いている場合は、ファイル先頭にバイトオーダーを示す
>コードが2〜3バイト入っているので、これを含めてcopyコマンドで結合すると
>途中にゴミが入ることになると思います。
>Shift-JIS,EUCであれば大丈夫です。
>JISはエスケープが閉じていないと、途中から文字化けする可能性もあります。

ですよね! 思慮不足のまま発言してしまいました。
補足(指摘)ありがとうございます。

[ ]