• ベストアンサー

一番大きいファイルを探し出す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();

  • CGI
  • 回答数5
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.5

度々すみません。 No.3さんの回答で間違いないです。 ケアレスミス多すぎ...、ほんとうに申し訳ないです。 open(IN,"$DIR$file.html"); にしてください。 今度こそ動くと思います...。

master-3rd
質問者

お礼

ありがとうございます。 今のところ無事動いています。 また何かあったときはよろしくお願いします。

その他の回答 (4)

  • jubay
  • ベストアンサー率30% (3/10)
回答No.4

すいません。一ヶ所訂正します。 #3の2行目 ファイルのデータ → ファイル名(ナンバー) ファイルのデータだとその中身だと勘違いしますよね。 どうも失礼しました。

  • jubay
  • ベストアンサー率30% (3/10)
回答No.3

$file = $files[$#files]; で、一番大きいファイルのデータが、 $fileに入っているので、次の open(IN,"$DIR$new.html"); では、$newではなく、$fileにすればいいですよ。 単純なミスですが、ぼくもよくやります。 変数に今何が入っているか意識しながらやると いいと思います。

  • ikspiari
  • ベストアンサー率48% (29/60)
回答No.2

あ~、すみません。 1度ディレクトリ内のファイルを変数に格納してソートかけた方が確実かもしれませんね。 正規表現も間違ってました...。 if ( $file =~ /^(\d+)\.html$/ ) { push(@files,$1); } } closedir(DIR); @files = sort { $a <=> $b } @files; $file = $files[$#files]; ... で、どうでしょう?

master-3rd
質問者

補足

おぉ!たびたびすみません。 これは、 --------------------------- #!/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)
回答No.1

8行目の if ( $file =~ /^(\d)+\.html$/ ) { を if ( $file =~ /^(\d+)\.html$/ ) { にします。 (\d)+だと先頭の数字だけ取得するので、 9.htmlは9,10.htmlは1と評価されます。 (\d+)だと\.までの数字を取得します。

master-3rd
質問者

お礼

ありがとうございます。 とりあえず動きました。 ただ、もう1つの回答で、正規表現が…というのがあったので、しばらく様子見させていただきます。

関連するQ&A

  • readdirでのファイル名取得

    readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • CGIがある場所以外のディレクトリの内容表示方法

    ディレクトリ内にあるファイルの一覧を表示しようとしていますがうまく出来ません。 ---------------- opendir(DIR, "./"); @dir_value = readdir(DIR); closedir(DIR); ---------------- この状態だともちろんですが、CGIがあるディレクトリの一覧を表示します。(この状態で、表示する部分のプログラム(ソース?)が間違っていないことはわかります) この1つ下(同ディレクトリ内に「img」ディレクトリ作成)の内容を表示したいのですが、うまく出来ません。 単純に、 ---------------- opendir(DIR, "./img"); @dir_value = readdir(DIR); closedir(DIR); ---------------- と、してみましたがファイルを表示しません。 他にも、「./img/」または絶対パス(/home/~~)でもだめでした。 下または上のディレクトリを参照するのには上記変更だけでは出来ないのでしょうか? 方法がありましたらお願いします。

    • ベストアンサー
    • CGI
  • フォルダ内のTXTファイル一覧表示

    opendir(DIR,"./"); while($bbb=readdir(DIR)) { print "<a href=\"$bbb\">$bbb</a><br>\n"; } closedir(DIR); で、取得するファイルをTXTに限定したいと思っています。 どのように追加すればいいかご存知の方がいましたら 教えて下さい。

    • ベストアンサー
    • Perl
  • フォルダの中身を知りたい

    opendir dir , $FORM{'user'}; @dir_file = readdir(dir); だったところを $open_folder = "../../img/cgi-bin/uploader/" . $FORM{'user'}; opendir dir , $open_folder; @dir_file = readdir(dir); というようにしました。 こうするとフォルダの中身が表示されません。 $img = $open_folder . "/ファイル名.gif"; print "<IMG SRC='$img'><BR>\n"; としたところ、きちんと絵が表示されました。 ※ファイル名は存在するファイルの名前をコピーして貼り付けました。 どうすればフォルダの中身を表示できるようになるのでしょうか?

    • ベストアンサー
    • Perl
  • フォルダ内のファイル名を取得して配列にぶち込みたいです

    こんにちは。 フォルダ内ファイル名を一覧にして表示させることまでは出来ますが、 この一覧表示されたファイル名を配列に入れるにはどうしたらよいでしょうか。 <?php $dir = "sample/"; // ディレクトリの内容を読み込みます。 if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: " . $file . "<br />\n"; } closedir($dh); } ?> ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • perl-cgi「日時によるファイル操作」について

    perl-cgi「日時によるファイル操作」について perl-cgiで、あるディレクトリ中のファイル更新日が最も若い2ファイルを表示して、それ以外を削除したいのですがどのようにすればよいでしょうか? #調べたいディレクトリを読み込む。 $Dir = "./cache"; opendir DIR,"$Dir"; my @alldir = readdir DIR; close DIR; #ファイル(パス)名と作成日時を求める。 #最新2つのファイルパス(名)を表示する。 print "NewFile".ファイルパス1; print "<HR>"; print "OldFile".ファイルパス2; #最新2つ以外は全て削除 unlink($_); exit(0);

    • ベストアンサー
    • Perl
  • readdir におけるフルパスでのファイル名取得(1)

    前提: current directory---perl scriptが存在する data directory -----.\DATA¥ current directory直下のフォルダ"DATA"に含まれるファイル名(text file)の取得は、 ------------------------------ opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } で、できますが、フルパス付は、どのようにすればできるでしょうか? 現状、DOS promptで下記のようにやっています。 dir /s/b/o .\DATA\*.txt > filelist.dat これを、perlで読み込んで、処理をやっています。 readdirをうまく使って、perlの中で済ませてしまいたいのです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ファイルの書き込み

    以下のことがしたいです。 testフォルダよりテキストファイル達を読み込み、 ある行だけ取り除いたのちnewtestフォルダに書き出したいと思います。 以下、コードになります。 #!/usr/bin/perl $n_dir = "newtest/"; $b_dir = "test/"; opendir(DIR, $b_dir); while($file = readdir(DIR)){ $nfile="$n_dir$file"; $bfile="$b_dir$file"; if (-T $bfile) { open(IN, $bfile); #testフォルダよりファイルの読み込み @list = <IN>; close(IN); open(OUT,">$nfile"); #newtestフォルダに書き出し while(@list = <IN>) { #testフォルダ内のファイルを一行ずつ読み込み if (@list =~ /test/) { #行にtestという文字列があるぎょうだけ書き出し print OUT @list; } } close(OUT); } else{next;} } closedir(DIR); ということをやりたいのですが、 書き出されるファイルは空です。 どこが間違っているのでしょうか。 エラーなどは特にありません。 testフォルダのファイル達が そのままnewtestフォルダに書き出されるのですが、 中身は空です。 ご協力お願いします。

    • ベストアンサー
    • Perl
  • PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラム

    PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラムで「test」というディレクトリ内のファイル一覧(ディレクトリ名とファイル名)を表示するようにしているのですが、この中からディレクトリ名のみ表示させたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 <?php if ($dir = opendir("test/")) { while (($file = readdir($dir)) !== false) { if ($file != "." && $file != "..") { echo "$file<br>\n"; } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • ファイル名を一括変更したいが正規表現方法を教ええください。

    リモート側のファイル名を一括変更したのですが、正規表現の方法がわかりません。 現在は以下のとおり記述しています。 opendir(DIR, $FTPdir); @FTPlist = grep (/^$head$year$mon$mday.*\.csv$/, readdir(DIR)); closedir(DIR); if (@FTPlist){ foreach (@FTPlist) { rename /^$head$year$mon$mday.*\.csv$/,/^$head$year$mon$xday.*\.csv$/,); print ; print "\n"; } }

    • ベストアンサー
    • Perl

専門家に質問してみよう