2011-09-02 48 views
0

我需要统计在CSV文件内同一日期和小时内发生的事件数量。如何统计在CSV文件中同一日期和小时内发生的事件数量使用PHP

我有一个实验项目安装在城市的一个偏远地方,测量温度和湿度水平。它每隔5分钟与我通信(或应该)将更新的IP地址发送到远程管理(使用3G连接)。

我需要计算它与我沟通的次数,以衡量3G稳定性的胜利特定气候变化。

日志使用这种格式(由制表符分隔):

Name   IP    DATE("d/m/Y G:i") 
EXPERIMENTAL 187.118.104.121 13/08/2011 16:05 
EXPERIMENTAL 187.118.104.121 13/08/2011 16:10 
EXPERIMENTAL 187.118.104.121 13/08/2011 16:15 
EXPERIMENTAL 187.118.104.121 14/08/2011 13:09 
EXPERIMENTAL 187.118.104.121 14/08/2011 14:23 

实施例:

13/08 16H 3 Times 
14/08 13H 1 Times 
14/08 14H 1 Times 

回答

1

您可以读取与fgetcsv()功能csv文件:为快速反馈

$count_by_date = array(); 

$fd = fopen('file.csv', 'r'); 
while ($fd && !feof($fd)) { 
    $data = fgetcsv($fd, 0, "\t"); 

    list($date, $time) = explode(' ', $data[3]); 

    if (!isset($count_by_date[$date])) { 
     $count_by_date[$date] = 0; 
    } 
    $count_by_date[$date] ++; 
} 
+0

是否存在阈值CSV大小,因为Mark在评论中向他自己的答案中建议导入数据库可能更好? (内存,CPU等) – horatio

+0

完美!只需将$ date [3]更改为[2]即可获取正确的字段。感谢大家 ! – Lipe

1

像这样会更适合的命令行脚本:

grep '13/08/2011' file.csv|wc -l 
+0

嗨马克,谢谢。文件内会有多个日期,我提到过这个。我需要总结机器人每小时通信的次数(刚刚编辑),请参阅上文。 对不起,缺乏信息! – Lipe

+0

小时很容易添加:'grep '13/08/2011 16'file.csv | wc -l' –

+0

@lipe:正如Paul所说,小时很容易添加。如果您需要进行更精细的切片/切块,则最好将CSV吸入数据库,并将文本时间戳转换为DB本地日期/时间字段,并在那里执行重型分组/匹配。一次转换会更快。否则你会浪费大量的CPU /磁盘时间加载/解析你想运行的每个查询的csv文件。 –

0

我同意这会更适合一个指挥官d行脚本,但如果这不是一个选项,你可以使用substr_count(),通过日期。

相关问题