■Windows版Rubyの細道・けもの道

■ナビゲータ

[南北館(最初のメニュー)]

  1. [Windows版Rubyの細道・けもの道]
    1. [1.準備編]
    2. [2.基本編]
    3. [3.応用編]
      1. [3-1.固定長データとCSVデータとの変換]
      2. [3-2.重複データの処理]
      3. [3-3.フォルダ内の一括処理]
        1. [3-3-1.フォルダ内のファイル名を出力する]
        2. [3-3-2.フォルダ内の複数のファイルをまとめて、1つのファイルに出力する]
        3. [3-3-3.フォルダ内のファイルについて一括変更をする]
      4. [3-4.1つのファイルを複数のファイルに分割する]
      5. [3-5.文字コードの変換]
      6. [3-6.半角全角変換]
      7. [3-7.多次元配列の処理]
      8. [3-9.その他]
    4. [スクリプトと入力データのサンプル]
Perlではどう処理する?
同じことをPerlではこうしています。

3.応用編

3-3.フォルダ内の一括処理

3-3-2.フォルダ内の複数のファイルをまとめて、1つのファイルに出力する

Rubyでは、ファイルハンドルに対応するファイル名を定数でも指定することができますが、変数で指定することもできます。これを利用して、「3-3-1.フォルダ内のファイル名を出力する」で出力したファイル名のデータを入力ファイルとして、順次オープンし、出力ファイルに追加出力することによって、複数のファイルを1つにまとめることができるようになります。

まず、

        filename = in1_file.gets   
   

で入力したファイル名をもとに

        in2_file = open("filename","r")   
   

で、1つずつファイルをオープンし、入力したデータを出力します。while命令がファイル名をセットしている「in1_file」を入力する部分と「in2_file」を入力している部分の二重構造になっている点に注意してください。

なお、"filename.txt"内のフォルダ名やファイル名に全角文字が含まれていると、正常にファイルをopenすることができませんので、注意してください(そうした処理が必要な場合は、ドライブ名から指定する絶対的なパスではなく、相対的なパスに変更して、全角文字が入らないようにしたり、フォルダ名やファイル名を変更しておく必要があります。相対的なパスについてはこちらを参照してください。)。

実際に応用する場合は、入出力データのファイル名等を変更して利用します。

【スクリプト】
# collect.rb    
# 内容 : フォルダ内のファイル名を読み込み、そのすべてのデータを1つにまとめる  
# Copyright (c) 2002-2015 Mitsuo Minagawa, All rights reserved. 
# (minagawa@fb3.so-net.ne.jp)   
# 使用方法 : c:\>ruby collect.rb    
#   
# 入力ファイル  
in1_file    =   open("filename.txt","r")    
# 出力ファイル  
out1_file   =   open("output.txt","w")  

# 主処理    
while   (filename   =   in1_file.gets)  
    filename.chomp! 
    in2_file    =   open(filename,"r")  
    while   (line1  =   in2_file.gets)  
        out1_file.print line1   
    end 
end 

# ファイルのクローズ    
in1_file.close  
in2_file.close  
out1_file.close 
   
【スクリプトとデータのサンプル】

スクリプトはこちらにあります。




Copyright (c) 2004-2015 Mitsuo Minagawa, All rights reserved.