過去ログ NO.1165482349
□ ひろたか [2006年12月06日10時52分]NXerさんいつもご回答いただきまして有難うございます。 動作確認中に少し問題が起こりました。 過去ログにてアンケートを終了は終了ごとそれ以外と並ぶようにしていたのですが、連番表示や10件ごとに表示するようにした為上手く動作していません。 多分、以下の箇所が違うからかなと思いこんでいるのですが、どういう風に訂正すればいいのかわかりません。 どうすればいいでしょうか? <過去ログ> # ● sorting by lastmod-key foreach (sort { $key{$a} <=> $key{$b} } keys %key) { unshift (@sortdir,$_); } <当方> foreach (sort {$b <=> $a} @dir) { if ($_ ne "\." && $_ ne "\.\.") { push (@sortdir,$_); }
□ NXer [2006年12月07日12時25分] ><過去ログ> # ● sorting by lastmod-key
過去ログの愚案をご検討いただきありがとうございます。NXerです。
プログラミングではソーティング、並べ替えはとても大切なルーチンです。 perlでは sort 関数を使います。配列変数で処理します。ソロバン でいうご破産(はさん)する、つまり初期化を途中でします。 171の見出しevalは別件・評価のための改造で追加してあります。 当方ではグラフの倍率の問題は発生していません。分母分子が 入れ替わり、1/8が8/1、つまり縮尺が倍率に変化する現象は過去ログ で調べてください。これは、論理エラーです。
>どういう風に訂正 次の行の後に挿入します。 ------------------------------------------------------- 171 else { print "<table>\n<tr><th>番号</th><th>new</th><th>eval</th><th>アンケートテーマ</th><th>開始日</th><th>終了日</th></tr>\n"; } ---------------------------------------------------- # ●newly inserted lines to sort files in the limit-date order新規挿入スクリプト foreach (@dir) { if (open(FILE,"$tmp$_")) { @lines = <FILE>; close (FILE); $subject = shift (@lines); ($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$mail,$url,) =split(/\,/,$subject); $key{$_} = $limit;#●sortkey setting } } @sortdir=(); #●initialization of sortdir array foreach (sort { $key{$a} <=> $key{$b} } keys %key) { unshift (@sortdir,$_); } 186 #----------------------上ソート下既存 $count=0; foreach (@sortdir) { ------------------------------------------ 配列は@で表します。次の行は @sortdir=(); #●initialization of sortdir array 配列をリセットして 最初からデータを格納しています。忘れると、データが2倍になります。 試す必要はありませんが、もし同じデータが2度現れたときは、リセット しない状態でソートをしたためです。 目的に応じてソートのキーを指定できます。参考書/サイトでは sort を見てください。
上の記述は過去ログとは少し表現など異なるかもしれません。この件は以上です。
|
|