• ベストアンサー

readdirでのファイル名取得

readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。

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

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

textファイルかどうかは拡張子で判断する、という前提でよろしいですよね。 readdir()の時点でファイルの種類を指定する事は出来ないと思います。 @file = grep /\.txt$/i, readdir(DIR); readdir()で読み込んだリストをgrepで絞り込む。こんな感じでどうでしょう? ちなみに、質問のソースでは、下記のファイル名で期待通りの動作をしないと思いますよ。 foo.Txt hoge.txt.zip

noname#95859
質問者

補足

venzouさん、ありがとうございます。 下記のスクリプトでうまく行きました。 ------------------------------------- opendir(DIR,"./DATA/"); @file = grep(/\.txt$/i, readdir(DIR)); closedir(DIR); foreach $myFileName(@file){ print "$myFileName\n"; } ------------------------------------- grep(EXPR,LIST); のところは grep EXPR,LIST; のどちらでも動くことを確認しました。 あえて、grep EXPR,LIST; としておられるのは、何か理由があるのですか? 宜しく、ご教授の程、お願いいたします。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

参考までに: Perlのプログラミングスタイルに、組み込みの関数に関しては 関数の引数を囲むかっこはつかわないようにしよう。というものがあります。 それを提唱している人が結構有名なPerl Monger のせいもあって、 モジュールをバリバリ書くような人はそうしている人が 目立つようです。

参考URL:
http://www.amazon.co.jp/dp/4873113008/
noname#95859
質問者

お礼

Sukusaker7さん、ありがとうございます。 これを機会に、もっとPerlをべんきょうしていきます。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

#1です。 >あえて、grep EXPR,LIST; としておられるのは、何か理由があるのですか? たまたま参考にしたサイトが、()なしでした。深い意味はありません。(^^; #2さんの回答にある glob() で、一発でしたね。知りませんでした。 私もまだまだ精進が足りませんね・・・失礼しました。

noname#95859
質問者

お礼

Venzouさん、ありがとうございます。 小生にとっては、十分に助かっております。 (実は、perl.exeとPerl300.dllだけてやっているのです) 今後とも、宜しくお願いいたします。

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

(1)globで簡単にできますよ。 my @files = glob('./DATA/*.txt'); (2)File::Slurpもありますよ。 use File::Slurp; my @files = grep /\.txt$/, read_dir('/path/to/dir');

noname#95859
質問者

お礼

guci-okさん、ありがとうございます。 Perlのすばらしさに改めて感激しております。 勉強していきます。 まず、きちんと、インストールして、globが使えるようにします。

関連するQ&A