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