Indexへ
(24124)//【24131】→(24133)
------------------------
【タイトル】G_PLUS用datファイルの一括作成
【記事番号】 24131 (*)
【 日時 】07/10/20 17:27
【 発言者 】コジマ

G_PLUS用datファイルの一括作成する外変です。
最上位(親)のパス(フォルダ)から、子フォルダ、孫フォルダ、曾孫フォルダのbatファイルを拾いあげて、無節操にdatファイルに記入します。
batファイル数が192個を超えるごとに、datファイルを新規作成します。

但し、batファイルの並びは、順不同です。
(datファイルの作成が不慣れな方は使ってみてください)


◎バッチファイル
以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。

@REM G_PLUS用datファイルの一括作成
@echo off
REM #jww
REM #cd
REM #h0
REM #e
ruby -x %~f0
pause
exit
#!ruby -Ks
path="c:/jww"    #最上位(親)のパス名

file_name="G_PLUS_TEST.dat"    #最初のファイル名

=begin
最上位(親)のパス(フォルダ)から、子フォルダ、孫フォルダ、曾孫フォルダのbatファイルを拾いあげる。

batファイル数が192個を超えるごとに、datファイルを新規作成する。
=end

def traverse(path,array)
    if FileTest.directory?(path)
        dir=Dir.open(path)
        while name=dir.read
            next if name == "."
            next if name == ".."
            traverse(path+"/"+name,array)
        end
        dir.close
    else
        process_file(path,array)
    end
end
def process_file(path,array)
    array<< path if path =~ /\.bat$/
end
def file_open(file_name)
    $stdout=open(file_name,"w")
    puts(";G+ for JWW   DATA FILE
;外変メニュー・データ・ファイル
; ◆メモ帳やエディタで編集する際は、注意して書替えてください。◆
;   page=   行には、ページ番号(1〜4)を記入します。
;   group_1= 行には、分類項目1の名前を記入します。
;   group_2= 行には、分類項目2の名前を記入します。
;   group_3= 行には、分類項目3の名前を記入します。
;   group_4= 行には、分類項目4の名前を記入します。
;   tytle=  行には、外変のタイトル(全角25文字まで)を記入します。
;   bat=   行には、外変のバッチファイル名をフルパスで記入します。
;           例 c:\jww\gaibu\abc.bat ドライブ名も必要です。
;   comment= 行には、覚え書きを記入します。
;        無記入でもかまいません。複数行でもかまいません。
;        comment= の代わりに行頭# も可能です
;-----パスの定義-------------
; bat= の行で置換します。フルパスを何度も書く必要がなくなります。
; 下記の定義なら、bat= c:\jww\gaibu\abc.bat → bat= %p1%abc.bat と簡略可
;                 注意:\ % の数や半角スペースのチェック
%p1%= c:\jww\
%p2%=
%p3%=
%p4%=
;----------------------------
")
end

file_open(file_name)
array=[]
a=Dir.entries(path)

a.each{|item2|
    if item2=~/\.bat$/
        if item2=~/^g_plus\.bat/i
            next
        else
            array<<(path+"/"+item2)
        end
    elsif item2=~/^\.+$/
        next
    else
        traverse(path+"/"+item2,array)
    end
}

n=0;j=0
array.uniq.each{|item|
    word="";jww=0;tytle=""
    open(item,"r"){|f|
        while word=f.gets
            if word=~/^@?REM\s+#jw/i
                jww=1
            end
            if word=~/^@?REM\s+([^#\s].+)$/i
                tytle=$1 if tytle == ""
            end
            break if tytle != "" && jww == 1
        end
    }

    if tytle != "" && jww == 1
        if n==193
            j += 1
            puts "end",";----------------------------"

            $stdout.close

            if file_name =~ /(\d+)(\.dat)$/
                file_name=$`+"#{j}"+$2
            else
                file_name=$`+"#{j}"+$& if file_name =~ /\.dat$/
            end
            file_open(file_name)
            n=0
        end
        if n==0
            puts(";----------------------------\npage= 1\n;----------------------------\ngroup_1= 定番\n;----------------------------")
    elsif n==22 || n==86 || n==150
puts("group_2=\n;----------------------------\n;----------------------------")
    elsif n==44 || n==108 || n==172
        puts("group_3=\n;----------------------------\n;----------------------------")
        elsif n==54 || n==118 || n==182
            puts("group_4=\n;----------------------------\n;----------------------------")
        elsif n==64
            puts(";----------------------------\npage= 2\n;----------------------------\ngroup_1= 定番\n;----------------------------\n;----------------------------")
        elsif n==128
            puts(";----------------------------\npage= 3\n;----------------------------\ngroup_1= 定番\n;----------------------------\n;----------------------------")
        end
        puts "tytle=#{tytle}","bat= "+item.gsub("/","\\"),
                "#"+item.gsub("/","\\"),";----------------------------"
        n += 1
    end
}
puts "end",";----------------------------"

$stdout.close
system("notepad #{file_name}")


Indexへ
(24131)←【24133】//(24134)
------------------------
【タイトル】訂正
【記事番号】 24133 (24131)
【 日時 】07/10/20 19:47
【 発言者 】コジマ

下位フォルダのトラバース速度を改善しました。(3倍速)

◎バッチファイル

@REM G_PLUS用datファイルの一括作成
@echo off
REM #jww
REM #cd
REM #h0
REM #e
ruby -x %~f0
pause
exit
#!ruby -Ks
path="c:/jww"    #最上位(親)のパス名

file_name="G_PLUS_TEST.dat"    #最初のファイル名

=begin
最上位(親)のパス(フォルダ)から、子フォルダ、孫フォルダ、曾孫フォルダのbatファイルを拾いあげる。

batファイル数が192個を超えるごとに、datファイルを新規作成する。
=end

def traverse(path,array)
    if path =~ /\.[a-z]+$/i
        process_file(path,array)
    else
        begin
            dir=Dir.entries(path)
        rescue
        else
            dir.each{|item|
                case item
                when /^\.+$/
                    next
                else
                    traverse(path+"/"+item,array)
                end
            }
        end
    end
end
def process_file(path,array)
    array<< path if path =~ /\.bat$/
end
def file_open(file_name)
    $stdout=open(file_name,"w")
    puts(";G+ for JWW   DATA FILE
;外変メニュー・データ・ファイル
; ◆メモ帳やエディタで編集する際は、注意して書替えてください。◆
;   page=   行には、ページ番号(1〜4)を記入します。
;   group_1= 行には、分類項目1の名前を記入します。
;   group_2= 行には、分類項目2の名前を記入します。
;   group_3= 行には、分類項目3の名前を記入します。
;   group_4= 行には、分類項目4の名前を記入します。
;   tytle=  行には、外変のタイトル(全角25文字まで)を記入します。
;   bat=   行には、外変のバッチファイル名をフルパスで記入します。
;           例 c:\\jww\\gaibu\\abc.bat ドライブ名も必要です。
;   comment= 行には、覚え書きを記入します。
;        無記入でもかまいません。複数行でもかまいません。
;        comment= の代わりに行頭# も可能です
;-----パスの定義-------------
; bat= の行で置換します。フルパスを何度も書く必要がなくなります。
; 下記の定義なら、bat= c:\\jww\\gaibu\\abc.bat → bat= %p1%abc.bat と簡略可
;                 注意:\\ % の数や半角スペースのチェック
%p1%= c:\\jww\\
%p2%=
%p3%=
%p4%=
;----------------------------
")
end

file_open(file_name)
array=[]
a=Dir.entries(path)

a.each{|item2|
    if item2=~/\.bat$/
        if item2=~/^g_plus\.bat/i
            next
        else
            array<<(path+"/"+item2)
        end
    elsif item2=~/^\.+$/
        next
    else
        traverse(path+"/"+item2,array)
    end
}

n=0;j=0
array.uniq.each{|item|
    word="";jww=0;tytle=""
    open(item,"r"){|f|
        while word=f.gets
            if word=~/^@?REM\s+#jw/i
                jww=1
            end
            if word=~/^@?REM\s+([^#\s].+)$/i
                tytle=$1 if tytle == ""
            end
            break if tytle != "" && jww == 1
        end
    }

    if tytle != "" && jww == 1
        if n==193
            j += 1
            puts "end",";----------------------------"

            $stdout.close

            if file_name =~ /(\d+)(\.dat)$/
                file_name=$`+"#{j}"+$2
            else
                file_name=$`+"#{j}"+$& if file_name =~ /\.dat$/
            end
            file_open(file_name)
            n=0
        end
        if n==0
            puts(";----------------------------\npage= 1\n;----------------------------\ngroup_1= 定番\n;----------------------------")
    elsif n==22 || n==86 || n==150
puts("group_2=\n;----------------------------\n;----------------------------")
    elsif n==44 || n==108 || n==172
        puts("group_3=\n;----------------------------\n;----------------------------")
        elsif n==54 || n==118 || n==182
            puts("group_4=\n;----------------------------\n;----------------------------")
        elsif n==64
            puts(";----------------------------\npage= 2\n;----------------------------\ngroup_1= 定番\n;----------------------------\n;----------------------------")
        elsif n==128
            puts(";----------------------------\npage= 3\n;----------------------------\ngroup_1= 定番\n;----------------------------\n;----------------------------")
        end
        puts "tytle=#{tytle}","bat= "+item.gsub("/","\\"),
                "#"+item.gsub("/","\\"),";----------------------------"
        n += 1
    end
}
puts "end",";----------------------------"

$stdout.close
system("notepad #{file_name}")