日付をデータ行の先頭に付与したので、読み込み部分をそれに対応させてみましょう。
sub FILEIN_MSG{
if( open( LOGFILE, "<./msg.txt" ) ){
flock( LOGFILE, 1 );
($Char_Count, $Vil_Img, $Vil_Css) = split( /<>/, <LOGFILE> );
for($index = 0 ; $index < $Char_Count; $index++ ){
$Char_Data[$index] = <LOGFILE>;
}
$index = 0;
while($temp = <LOGFILE>){
($Msg_Date, $Msg_Type, $Msg_Char_Index, $Msg_Time, $Msg_Text) = split( /<>/, $temp);
if($Msg_Date == $Day_Count){
$Msg_Data[$index++] = $temp;
}
}
close( LOGFILE );
}
}……こんな感じかな?
違っているのは、$Msg_Dateとして日付を読み込み、それを$Day_Countと比較して、同じだったらログデータとして$Msg_Dataに格納しているところでしょうか。前は全部の行を放り込んでましたから。
ここでは読み込み時に該当日付のデータだけを選別していますが、読み込むときは全部読み込んでおいて、出力時に選別するという方法もアリでしょうね。
うーん。まあ、一応メモリ節約という意味で、該当日付のものだけを読み込むということにしておきます。
実装を進めていけば、そのうち別の結論になりそうな気もしますから、今はこのままで。