ファイルを均等あるいは特定文字を基準にNo.35770
hayataro8 さん 17/05/05 16:29
 

http://hide.maruo.co.jp/lib/macro/dividefile.html

上記サイトのマクロで、
【2.行頭の特定の文字列や符号を指標にして分割する】を使っています。

マクロ自動分割した後の分割ファイル名の後尾に  _1  _20 などのナンバリン
グが付加されてしまいます。

自動分割後、先頭の1行目の文字列をまるごとファイル名として使用して保存したい
のですが、どのようにすれば良いでしょうか?

下記の【changenameマクロ】を応用することで、良いマクロができあがらないでしょ
うか?

何卒よろしくお願い申し上げます。




■■■■■■■■■■■■■■■■■■■■■■■■■
$ext = ".txt"; // 拡張子の指定
#n = 1; // 取得行の指定

movetolineno 0, #n;
changename gettext2( 0, #n, linelen2, #n ) + $ext;
SAVEAS;

endmacro;
■■■■■■■■■■■■■■■■■■■■■■■■■
//--------- DivideFile.mac --------------------------------------//

//    ファイルを均等あるいは特定文字を基準にして分割するマクロ  Ver1.00
//                                    山紫水明

#nextline = 0; //指標文字列の次の行を区切りにするときは 1
#bx = x; #by = y;
goscreentop;
menu "&1 均等分割(論理行で計算)",
     "&2 均等分割(表示行で計算)",
     "&3 行頭の特定文字・記号を指標にする";
#begin = tickcount;
#c = result;
if( #c < 1 ) goto End;
#handle = hidemaruhandle( 0 );
$base = leftstr( basename2, strlen(basename) - strlen(filetype) );
disabledraw;
$ext = filetype;
if( #c == 1 ) #linenum = linecount2;
else if( #c == 2 ) #linenum = linecount;
else goto MojiBunkatu;
#ime = imestate;
if( #ime ) imeswitch;
#divide = val( input( "分割数は?") );
if( #ime ) imeswitch;
if( #divide < 2 ) endmacro;
if( #divide > #linenum ) {
    message "分割できません";
    endmacro;
}
#unit = #linenum / #divide;
gofiletop;
disableinvert;
#i = 1;
while( #i <= #divide ) {
    while( code == 0x0d ) down;//空行はスキップ
    beginsel;
    if( #i == #divide ) gofileend;
    else {
        if( #c == 1 ) movetolineno 1, #unit * #i + 1;
        else {
            moveto 0, #unit * #i - 1;
            if( code != 0x0d ) movetolineno 1, lineno + 1;
        }
    }
    call CopyPaste;
    title str(#i) + " / " + str(#divide);
    #i = #i + 1;
}
goto End;

MojiBunkatu:
$sign = input("行頭の区切り文字・記号は?(複数文字,正規表現も可)");
if( $sign == "" ) endmacro;
gofiletop;
disableinvert;
#i = 1;
while( 1 ) {
    beginsel;
    searchdown "^" + $sign, regular;
    if( !result ) {
        gofileend;
        #stop = 1;
    }
    if( #nextline ) movetolineno 1, lineno + 1;
    call CopyPaste;
    #i = #i + 1;
    if( #stop ) break;
    title str(#i);
}
End:
moveto #bx, #by;
if( #c < 1 ) endmacro;
#time = tickcount - #begin;
if( #none ) {
    #i = #i - 1;
    closehidemaruforced #nullhandle;
    message "行数と行の状態の関係で最後のファイルが空になりました。";
}
message str( #i - 1 ) + " 個に分割しました。\n所要時間:" + str( #time / 1000 )
         + " 秒" + str( #time % 1000 );
endmacro;

CopyPaste:
copy;
openfile "/h";
paste;
gofileend;
if( x == 0 && y == 0 ) {
    #none = 1;
    #nullhandle = hidemaruhandle(0);
}
if( !#none ) saveas $base + "_" + str( #i ) + $ext;
if( #c == 3 && #nextline == 0 ) gofiletop;
setactivehidemaru #handle;
return;
//--------------------------------------------------//




■■■■■■■■■■■■■■■■■■■■■■■■■

[ ]
RE:35770 ファイルを均等あるいは特定文字No.35773
山紫水明 さん 17/05/05 21:26
 
 hayataro8さん,

>自動分割後、先頭の1行目の文字列をまるごとファイル名として使用して保存
>したいのですが、どのようにすれば良いでしょうか?

マクロの下から4行目
if( !#none ) saveas $base + "_" + str( #i ) + $ext;

if( !#none ) {
    gofiletop;
    $$name = gettext2( 0, 1, linelen2, 1 ) + $ext;
    saveas $$name;
}
と変えてみてください。
 ただし,例外的な処理が必要な場合があるかもしれませんが,とりあえずこれ
で試してください。

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:35773 ファイルを均等あるいは特定文字No.35774
hayataro8 さん 17/05/06 06:47
 
山紫水明 様、



ご多忙の所、早速ご返信頂き誠にありがとうございます。

ご指示の通り、やってみようと思います。

有り難うございました。

m(__)mペコペコペコ

[ ]