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

■ナビゲータ

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

  1. [Windows版Perlの細道・けもの道]
    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. [スクリプトと入力データのサンプル]
rubyではどう処理する?
同じことをrubyではこうしています。

3.応用編

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

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

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);
    
【スクリプトとデータのサンプル】

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




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