- ベストアンサー
CSVファイルのデータ整理と書き込み方法について
- CSVファイルのデータを比較しながら書き込む方法について教えてください。
- CSVファイルのデータ整理と除去方法、書き込み手順について教えてください。
- CSVファイルのデータ整理と書き込み方法について質問です。行ごとのデータを比較しながら処理する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
if(($before_ip==$ip)&&($before_filename==$filename)&&($before_dateと$dateの差が数秒)){ continue; } else { $array = compact("date", "filename", "ip"); $string = implode(",",$array); fputs('total.csv', $string); $before_date = $date; $before_filename = $filename; $before_ip = $ip; } これでどうでしょう。
その他の回答 (2)
- fire--
- ベストアンサー率49% (146/293)
>しかし2行目と3行目、3行目と4行目の比較は通してしまうため、 >結果的に2行目と4行目の「同IP、同ファイルで数秒以内」が通って >しまいます。 >う~ん…色々考えてみます。。。 Ano.1の最初に書いたソートをしてみてください。
お礼
お礼が送れ申し訳ございません。 IPでソートし前後を比較することで望みの結果が 得られました。 この度はご丁寧にありがとうございました。 大変参考になりました。
- fire--
- ベストアンサー率49% (146/293)
同じようなアクセスが2箇所から並行していあるかもしれないので、 まずはファイル名、IPアドレス、時間でソート。 次に1行毎読取り、前行と比較して、 ファイル名、IPアドレスが同じ、時間が数秒以内なら、出力せず 上記条件を充たさなかったら、出力し、その行を前行として保管 こんなもので良いのではないでしょうか。
補足
お早いアドバイスありがとうございます。 流れとしまして、 copy($log , $mycsv); で、安全のためサーバのログファイルを自分のディレクトリへコピーし、 $file = fopen($mycsv, "r"); if ($file) { while (!feof($file)) { $buffer = fgets($file, 4096); list($date, $ex, $filename, $check, $ip) = explode(",", $buffer); でコピーしたCSVの各パラメータを取り出し、substr等でゴミを除去した後、必要な$date,$filename,$ip のみを $array = compact("date", "filename", "ip"); $string = implode(",",$array); fputs('total.csv', $string); で書き出しております。 1行読み取り→ゴミ除去→1行書き込み という事をやっておりますので、前行との比較、というのがどうもピンときません…。 すみません、素人的な質問で。
お礼
スクリプトまで書いて頂き、ありがとうございます。 恐縮です。 試してみましたが、前行と比較していますので、例えば 12:00:00,fileA,255.255.255.0 12:00:01,fileA,255.255.255.0 12:00:02,fileA,255.255.255.255 12:00:03,fileA,255.255.255.0 というログの場合、1行目と2行目を判断し、はじいてくれます。 しかし2行目と3行目、3行目と4行目の比較は通してしまうため、 結果的に2行目と4行目の「同IP、同ファイルで数秒以内」が通ってしまいます。 う~ん…色々考えてみます。。。