さだひろ
[E-Mail]
2000/03/12(日) 14:24:01
とほほラウンジのデータ構造はごぞんじですか?(私も調べてわかったのだが ^^;
[wwwlng]フォルダの下に[200003]などのフォルダ(年月を表す)があり,
その下には 00030125.txtなどのファイル(00年03月0125番目)があります.
それで@files には,
$files[0] = "952834124 200003/00030001.txt"
$files[0] = "952834094 200003/00030003.txt"
$files[0] = "952834064 200003/00030002.txt"
のようなデータが格納されています.
# 952834064は最終変更時のUNIX時間
#(1970-01-01 00:00:00 UTCから起算した秒数)
つまり,@files = sort { $b <=> $a } @files; で
更新日(正確には秒)順に,splice(@files, $num); で
表示するスレッドの数を制限しています.
ですからここまでは変えないでいいでしょう.
そこで sub printTopicList #(@files) の中をいじります.
その中の
foreach $file(@files){
...............
print "<TABLE BORDER=1>\n";
}
}
のループ(54行ある)で,実際のHTML表示を出力しています.
ですからその前でsubjectを基準にソートするため,
上に示したループの前に次のコードを加えてみてください.
#@filesのファイルからsubjectを集めてソートする.
local %subjects;
foreach $file (@files) {
local $fn = (split(/ /, $file))[1];
open(IN, $fn) || next;
$subject = <IN>;
$subject =~ s/^Subject: //;
$subject =~ s/[\r\n]+$//;
$subjects{$file} = $subject;
close(IN);
}
@files = sort {$subjects{$a} cmp $subjects{$b}} @files;
タイトルは文字列の順,すなわちASCII順になります.
これでよければいいのですが.
日本文字があった場合,あいうえお順とするには>????
sortのところで何か考えて見てください.