- ベストアンサー
readdirでのファイル名取得
readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
textファイルかどうかは拡張子で判断する、という前提でよろしいですよね。 readdir()の時点でファイルの種類を指定する事は出来ないと思います。 @file = grep /\.txt$/i, readdir(DIR); readdir()で読み込んだリストをgrepで絞り込む。こんな感じでどうでしょう? ちなみに、質問のソースでは、下記のファイル名で期待通りの動作をしないと思いますよ。 foo.Txt hoge.txt.zip
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
参考までに: Perlのプログラミングスタイルに、組み込みの関数に関しては 関数の引数を囲むかっこはつかわないようにしよう。というものがあります。 それを提唱している人が結構有名なPerl Monger のせいもあって、 モジュールをバリバリ書くような人はそうしている人が 目立つようです。
お礼
Sukusaker7さん、ありがとうございます。 これを機会に、もっとPerlをべんきょうしていきます。
- venzou
- ベストアンサー率71% (311/435)
#1です。 >あえて、grep EXPR,LIST; としておられるのは、何か理由があるのですか? たまたま参考にしたサイトが、()なしでした。深い意味はありません。(^^; #2さんの回答にある glob() で、一発でしたね。知りませんでした。 私もまだまだ精進が足りませんね・・・失礼しました。
お礼
Venzouさん、ありがとうございます。 小生にとっては、十分に助かっております。 (実は、perl.exeとPerl300.dllだけてやっているのです) 今後とも、宜しくお願いいたします。
- guci-ok
- ベストアンサー率33% (49/146)
(1)globで簡単にできますよ。 my @files = glob('./DATA/*.txt'); (2)File::Slurpもありますよ。 use File::Slurp; my @files = grep /\.txt$/, read_dir('/path/to/dir');
お礼
guci-okさん、ありがとうございます。 Perlのすばらしさに改めて感激しております。 勉強していきます。 まず、きちんと、インストールして、globが使えるようにします。
補足
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; としておられるのは、何か理由があるのですか? 宜しく、ご教授の程、お願いいたします。