プロが教える店舗&オフィスのセキュリティ対策術

指定のフォルダに指定のファイルがあったら画像を表示、なければ飛ばすというようにしたいのです。

opendir (FOLDER,"img");
@FOLDERS = readdir (FOLDER);
closedir(FOLDER);

my ($cnt) = 0;
foreach(@FOLDERS)
{
if ($_ =~ /.+\..+/) { $cnt++; }
}

$tate = $cnt/10;

print "<TABLE CELLSPACING=0 CELLPADDING=2>\n";
print "<TR>\n";
for($i=1;$i<11;){
for($n=2;$n<$cnt;$n++){
$F = $FOLDERS[$n];
if("$i.jpg" eq "$F"){
print "<TD CLASS=TD1><IMG SRC='img/$i.jpg' HEIGHT=65 WIDTH=50><BR>$i</TD>\n";
$i=$i+1;
} #if
} #for $n
} #for $i

というようにしてみたのですが時間がかかりすぎてしまいます。
何かいい方法はないでしょうか?

A 回答 (3件)

全く未テストですが、こういうのは?



print "<TABLE CELLSPACING=0 CELLPADDING=2>\n";
print "<TR>\n";
for($i=1;$i<11;){
for($n=2;$n<$cnt;$n++){
my $hoge = './img/' . $n . '.jpg';
if (-e "$hoge"){
print "<TD CLASS=TD1><IMG SRC='$hoge' HEIGHT=65 WIDTH=50><BR>$n</TD>\n"; }
$i=$i+1;
} #for $n
} #for $i

参考URL:http://tohoho.wakusei.ne.jp/wwwperl1.htm#FileTest
    • good
    • 0

例えば、


#!/usr/local/bin/perl

opendir (FOLDER,"img");
@FOLDERS = readdir (FOLDER);
closedir(FOLDER);

print "<table>\n";
print "<tr>";
foreach(@FOLDERS)
{
if ($_ =~ /\d+\.jpg/) {
print "<img src=\"img/$_\" />";
}
}
print "</tr>\n";
print "</table>";
とかじゃダメなの?
    • good
    • 0
この回答へのお礼

やりたいことは以下のようなことです。
会員番号1の人の文字データと画像をリンクさせたい。
文字側からのリンクはうまくいきましたが、「顔は思い出せるけど名前がわからない」という場合に備えて顔の一覧をつくりたいのです。
人数がたくさんいるため、横10列までとし、行はファイル数/10の計算で出したものにします。

お礼日時:2003/03/13 17:30

テーブル作成する前に、画像があるかどうか確認して、


画像があれば、それを配列に入れておいて、
foreachで吐き出しては?
$n=2や$tateは意味不明ですが・・・。

また、画像が0~10.jpgまでしか無いようであれば、
フォルダから確認する作業の所で配列に入れたほうが良いかも。

$i = $i + 1;

$i++;
としたほうが早いかと。
    • good
    • 0

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