- ベストアンサー
一番大きいファイルを探し出すCGI…が動かない!
ホームページ作成中です。 以前ここで「あるフォルダ内に連番のhtmlファイルが自動作成され(1.html,2.html~~)、その中で一番数が大きいファイルを表示するCGI」というのを質問させていただきました。 その後すぐ回答が来て、なんとCGIを作っていただいたんです。で、試しに使ってみると(5~6枚くらい)、無事新しい方(数が多い方)を読み込んでくれていたので、感謝の気持ちと共に質問を解決させていただきました。 しかし、後になって問題が発生しました。 桁が上がると、新しい物を表示してくれないのです。 9.html,10.htmlがあると、9htmlの方を表示してしまうんです。 ソースは以下の通りですが、どこを変えることで2桁、3桁と対応可能でしょうか?自動生成するCGIに0001.htmlというように吐き出させればいいのかもしれませんが、そうする技術も無いので… よろしくお願いします。 ------------------------------------- #!/usr/bin/perl $DIR = "./se3_diary/"; $new = 0; opendir(DIR,$DIR); while ( $file = readdir(DIR) ) { if ( $file =~ /^(\d)+\.html$/ ) { $new = $1 if ( $new < $1 ); } } closedir(DIR); open(IN,"$DIR$new.html"); $src = join("",<IN>); close(IN); print "Content-Type: text/html\n\n"; print $src; exit();
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
度々すみません。 No.3さんの回答で間違いないです。 ケアレスミス多すぎ...、ほんとうに申し訳ないです。 open(IN,"$DIR$file.html"); にしてください。 今度こそ動くと思います...。
その他の回答 (4)
- jubay
- ベストアンサー率30% (3/10)
すいません。一ヶ所訂正します。 #3の2行目 ファイルのデータ → ファイル名(ナンバー) ファイルのデータだとその中身だと勘違いしますよね。 どうも失礼しました。
- jubay
- ベストアンサー率30% (3/10)
$file = $files[$#files]; で、一番大きいファイルのデータが、 $fileに入っているので、次の open(IN,"$DIR$new.html"); では、$newではなく、$fileにすればいいですよ。 単純なミスですが、ぼくもよくやります。 変数に今何が入っているか意識しながらやると いいと思います。
- ikspiari
- ベストアンサー率48% (29/60)
あ~、すみません。 1度ディレクトリ内のファイルを変数に格納してソートかけた方が確実かもしれませんね。 正規表現も間違ってました...。 if ( $file =~ /^(\d+)\.html$/ ) { push(@files,$1); } } closedir(DIR); @files = sort { $a <=> $b } @files; $file = $files[$#files]; ... で、どうでしょう?
補足
おぉ!たびたびすみません。 これは、 --------------------------- #!/usr/bin/perl $DIR = "./se3_diary/"; $new = 0; opendir(DIR,$DIR); while ( $file = readdir(DIR) ) { if ( $file =~ /^(\d+)\.html$/ ) { push(@files,$1); } } closedir(DIR); @files = sort { $a <=> $b } @files; $file = $files[$#files]; open(IN,"$DIR$new.html"); $src = join("",<IN>); close(IN); print "Content-Type: text/html\n\n"; print $src; exit(); ----------------------------------- で良いのでしょうか? 動かなくなってしまったのですが… お手数かと思いますが、よろしくお願いします。
- jubay
- ベストアンサー率30% (3/10)
8行目の if ( $file =~ /^(\d)+\.html$/ ) { を if ( $file =~ /^(\d+)\.html$/ ) { にします。 (\d)+だと先頭の数字だけ取得するので、 9.htmlは9,10.htmlは1と評価されます。 (\d+)だと\.までの数字を取得します。
お礼
ありがとうございます。 とりあえず動きました。 ただ、もう1つの回答で、正規表現が…というのがあったので、しばらく様子見させていただきます。
お礼
ありがとうございます。 今のところ無事動いています。 また何かあったときはよろしくお願いします。