アプリ版:「スタンプのみでお礼する」機能のリリースについて

readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。

opendir(DIR,"./DATA/");
@file=readdir(DIR);
closedir(DIR);

foreach $myfilename(@file){
if($myfilename=~/txt|TXT/){
print "$myfilename\n"; #確認用
}
}

よろしくお願いいたします。

A 回答 (4件)

textファイルかどうかは拡張子で判断する、という前提でよろしいですよね。



readdir()の時点でファイルの種類を指定する事は出来ないと思います。

@file = grep /\.txt$/i, readdir(DIR);

readdir()で読み込んだリストをgrepで絞り込む。こんな感じでどうでしょう?

ちなみに、質問のソースでは、下記のファイル名で期待通りの動作をしないと思いますよ。

foo.Txt
hoge.txt.zip

この回答への補足

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; としておられるのは、何か理由があるのですか?
宜しく、ご教授の程、お願いいたします。

補足日時:2007/01/28 18:26
    • good
    • 0

参考までに:



Perlのプログラミングスタイルに、組み込みの関数に関しては
関数の引数を囲むかっこはつかわないようにしよう。というものがあります。

それを提唱している人が結構有名なPerl Monger のせいもあって、
モジュールをバリバリ書くような人はそうしている人が
目立つようです。

参考URL:http://www.amazon.co.jp/dp/4873113008/
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/30 23:42

#1です。


>あえて、grep EXPR,LIST; としておられるのは、何か理由があるのですか?

たまたま参考にしたサイトが、()なしでした。深い意味はありません。(^^;

#2さんの回答にある glob() で、一発でしたね。知りませんでした。

私もまだまだ精進が足りませんね・・・失礼しました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/30 23:47

(1)globで簡単にできますよ。



my @files = glob('./DATA/*.txt');

(2)File::Slurpもありますよ。

use File::Slurp;
my @files = grep /\.txt$/, read_dir('/path/to/dir');
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/30 23:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!