• ベストアンサー

ディレクトリ内の全ファイルをオープンする方法

特定のディレクトリ内に存在する全てのファイルを順次オープン・クローズするプログラムを作成したいと思います。 例えば、特定のディレクトリに下記のファイルがあるとします。 A.txt B.txt このときにA.txtをオープンし内容を読み込みクローズし、次にB.txtを同じようにオープンし内容を読み込んでクローズするプログラムです。内容を読み込んで処理する部分は問題なく、また上記のように存在するファイルが決まっていれば何も問題はないのですが、下記の場合にはどのように存在するファイルを探せばよいのかがわかりません。 ・何ファイルあるかわからない ・存在するファイルは必ずテキスト ・ファイル名は決まっていない(perlで問題なく読み込めるファイル長) なお、特定のディレクトリに存在するファイルを順次全て読み込めればよいので、その読み込む順番にこだわりはありません。 どうぞよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そのディレクトリを $dir として opendir(DIR, $dir); for my $file (readdir(DIR)) { unless ($file eq '.' || $file eq '..') { $file = "$dir/$file"; open(FILE, $file); FILE から読み込む close(FILE); } } closedir(DIR); くらいかなぁ.

mmei
質問者

お礼

さっそくのご回答ありがとうございます。 確認してみます。

その他の回答 (2)

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.3

# File::Slurpを使って、 use File::Slurp; for (read_dir('/path/to/dir')) { my @lines = read_file($_); ... }

mmei
質問者

お礼

File::Slurpを使ったやり方は はじめてみました。 ご回答ありがとうございます。 後で確認してみます。

  • okiyoshi
  • ベストアンサー率34% (11/32)
回答No.2

# glob を使って、 foreach my $file ( grep -f, glob( "$dir/*" ) ) { open FH, $file or die( "can't open $file" ); # 処理 close FH; }

mmei
質問者

お礼

globを使用することで簡易に表現できるのですね。 ご回答ありがとうございます。

関連するQ&A