Perlでは、ファイルハンドルに対応するファイル名を定数でも指定することができますが、変数で指定することもできます。これを利用して、「3-3-1.フォルダ内のファイル名を出力する」で出力したファイル名のデータを入力ファイルとして、次々と入力し、出力ファイルに追加出力することによって、複数のファイルを1つにまとめることができるようになります。
まず、「$filename = <IN1>」で入力したファイル名をもとに「open(IN2,"$filename")」で順次オープンし、出力します。while命令がファイル名をセットしている「IN1」を入力する部分と「IN2」を入力している部分の二重構造になっている点に注意してください。
なお、"filename.txt"内のフォルダ名やファイル名に全角文字が含まれていると、正常にファイルをopenすることができませんので、注意してください(そうした処理が必要な場合は、ドライブ名から指定する絶対的なパスではなく、相対的なパスに変更して、全角文字が入らないようにしたり、フォルダ名やファイル名を変更しておく必要があります。相対的なパスについてはこちらを参照してください。)。
実際に応用する場合は、入出力データのファイル名等を変更して利用します。
# collect.pl
# 内容 :フォルダ内のファイル名を読み込み、そのすべてのデータを1つにまとめる
# Copyright (c) 2002 Mitsuo Minagawa, All rights reserved.
# (minagawa@fb3.so-net.ne.jp)
# 使用方法 : c:\>perl collect.pl
#
open(IN1,"filename.txt");
open(OUT1,">output.txt");
while ($filename = <IN1>) {
chomp($filename);
open(IN2,"$filename");
while ($data = <IN2>) {
print OUT1 $data;
}
}
close(IN1);
close(IN2);
close(OUT1);