データフォーマットを変更したので、読み込み部分にも改変を。
sub FILEIN_MSG { if( open( LOGFILE, "<./msg.txt" ) ){ flock( LOGFILE, 1 ); $line = <LOGFILE>; $line =~ s/\r//g; ($Vil_Name, $Vil_Img, $Vil_Css) = split( /<>/, $line); $Day_Count = $Query_Tbl{'day'}; $Day_Count_Max = -1; while($line = <LOGFILE>){ $line =~ s/\r//g; ($Line_Day, $Line_Type, $Line_Char_Index, $Line_Time, @data) = split( /<>/, $line); if($Line_Type == 81){ push(@Char_Name, $data[0]); push(@Char_Icon, $data[1]); } if($Day_Count_Max < $Line_Day){ $Day_Count_Max = $Line_Day; } push(@Msg_Line, $line); } if($Day_Count == -1){ $Day_Count = $Day_Count_Max; } close( LOGFILE ); } }
Line_Type が81の時に、それをキャラクターのデータとしてChar_Name とChar_Icon に格納しています。配列に追加する形になるので、push 関数を使っています。
あとは、進行中の最新の日付(Day_Count_Max)を取得するために、各行の日付と比較して、大きい方をセットし直すような実装にしています。どの日付を表示すれば良いのかは、事前には分からないので、とりあえずメッセージのデータは全てメモリ上に読み込みしています。(これはあとでまた該当の日付の分を読み込むだけに戻すかも知れません)
さて、次は表示側ですね。