- ベストアンサー
cgiでのフォルダの中のファイル数
カレントフォルダの中にある画像ファイルの数を数えたいのですが、どのようにすればいいでしょうか? (画像ファイル、と指定ができない場合はカレントフォルダの中にあるすべてのファイル数) opendirとか使えばできますか? #perlです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
opendir(FOLDER,"meibo"); @list = readdir(FOLDER); closedir(FOLDER); my ($cnt) = 0; foreach (@list) { if ($_ =~ /.+\..+/) { $cnt++; } } とすれば、「ファイルと思われる物」の数をカウントします。 このforeach文を foreach (@list) { if ($_ =~ /.+\.jpg$/) { $cnt++; } elsif ($_ =~ /.+\.jpeg$/) { $cnt++; } elsif ($_ =~ /.+\.jpe$/) { $cnt++; } elsif ($_ =~ /.+\.gif$/) { $cnt++; } elsif ($_ =~ /.+\.png$/) { $cnt++; } elsif ($_ =~ /.+\.bmp$/) { $cnt++; } } とすれば、「JPG、GIF、PNG、BMPファイルと思われる物」の数をカウントします。
その他の回答 (3)
- HUTABA
- ベストアンサー率27% (436/1611)
>if ($_ =~ /.+\..+/) { $cnt++; } >はどういう意味なのでしょうか? 簡単な正規表現です。 この例の場合、「何文字か文字が続いた後に"."があって、さらに何文字か文字が続く」という意味です。 正規表現については、とほほのWWW入門でも詳しく解説されていますし、正規表現だけを取り扱ったサイトもたくさんありますので、色々なサイトを見て勉強されれば良いと思います。
お礼
説明ありがとうございます。 正規表現はどうしても苦手で…。 でも避けて通れない道ではあるんですよね。 ありがとうございました。
- HUTABA
- ベストアンサー率27% (436/1611)
#1です。 >これでファイル数が取得できているのでしょうか? 全てのエントリ(ファイル・フォルダ)を取得しています。 パソコンをDOS画面で使用した事はありますか? DIRコマンドを実行すると、自分のいるディレクトリ、1つ上のディレクトリが「.」と「..」で表されますよね? それもエントリとして取得されています。 ですから、#1に書いたように関数だけに頼らず、ご自身でファイルを選別する必要があります。
お礼
再度回答ありがとうございます。 >全てのエントリ(ファイル・フォルダ)を取得しています。 >関数だけに頼らず、ご自身でファイルを選別する必要があります。 実際にはどのようにしたらいいのでしょうか? DOSは使用したことありますがあまり詳しくはわかりません。 よろしくお願いします。
- HUTABA
- ベストアンサー率27% (436/1611)
opendir()した後にreaddir()でエントリの一覧を取得し、そこからディレクトリを除外するか、拡張子で必要なファイル数をカウントすればできますよ。
お礼
回答ありがとうございます。 とほほさんのところも見ましたがイマイチ理解できていません…。 以下のような構造になっています。 ┗meibo ┣meibo.cgi ┣1.jpg ┣2.jpg ┣3.jpg : ┗197.jpg この「meibo.cgi」でjpgファイルの数を数えたいのです。 opendir(FOLDER,"meibo"); while($folders = readdir(FOLDER)) {print "$folders\n";} closedir(FOLDER); としてみましたが…。 これでファイル数が取得できているのでしょうか?
お礼
無事できました。 ありがとうございます。 質問なのですが、 if ($_ =~ /.+\..+/) { $cnt++; } はどういう意味なのでしょうか?