• ベストアンサー

きょうだけのデータのみ取得したい

アクセス解析のようなCGIを作っています。 logfile.dat→ACCESSFILE 2006年08月30日(水)06時59分51秒 6×.36.32.141 http://×××/menu.htm 2006年08月30日(水)04時59分51秒 6×.36.32.185 http://×××/menu.htm 2006年08月29日(火)08時00分51秒 62.36.30.143 http://×××/menu.htm 2006年08月28日(木)09時00分51秒 64.36.32.145 http://×××menu.htm ↓プログラム @accesslog = <ACCESSFILE>; #***** 各時間の件数を求める ***** foreach $rec ( @accesslog ) { $jikan = substr( $rec, 18, 2 ); $param{ $jikan }++; } ************************************************** 上記では全件表示されてしまいます。 今日が30日だとしたら30日分だけデータを取得する にはどうすればよろしいでしょうか?

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

  • ベストアンサー
noname#25358
noname#25358
回答No.2

 foreach 行の次に下記のロジックを入れてください。 1.time 関数の値を "xxxx年xx月xx日" の形式にフォーマット 2.データ各行先頭の14文字を、フォーマットした文字列と比較 3.一致しない場合は次の行へ  以下はその答え。(できれば見ないでください) @time = localtime(time); $time = sprintf("%04d年%02d月%02d日", $time[5]+1900, $time[4]+1, $time[3]); if ( $time ne substr( $rec, 0, 14 ) ) { next; }

Scotty_99
質問者

お礼

ヒント見てしまいました(^_^;)でも、見なきゃわからなかったですのでお許しください。自分でも手を加えてこんな感じで仕上げられました foreach $rec ( @accesslog ) { ( $yyyymmdd, $youbi, $hhmmss ) = &gettime; if ( $yyyymmdd eq substr( $rec, 0, 14 ) ) { $jikan = substr( $rec, 18, 2 ); $param{ $jikan }++; } } 回答ありがとうございました。

その他の回答 (1)

noname#96023
noname#96023
回答No.1

ログの日付フォーマットが変わらないなら substrで11,12文字目を取り出して今日の日付と比較する(場合によっては、年、月も同じやり方で比較)

Scotty_99
質問者

お礼

回答ありがとうございました。 なるほど~。論理的にはそのようにやるんですね。

関連するQ&A

専門家に質問してみよう