2011-09-02 49 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(),通過日期。

相關問題