2015-02-24 149 views
0

所以我有一個日誌/ txt文件至極包含以下內容:單行文本日誌文件分析

31 dec. 2014 11:56 - UserA: Hi31 dec. 2014 11:56 - UserB: Hi to you31 dec. 2014 11:56 - UserA: Whats your name?31 dec. 2014 11:57 - UserB: Nancy 

林試圖讓這個成爲一個更可讀的格式..... 所以我嘗試以下:

<?php 
//load the logfile 
$txt_file = file_get_contents('test.txt'); 
$txtfile2 = preg_split("/ (|:) /", $txt_file); 
$rows = explode("\n", $txtfile2[0]); 

foreach($rows as $row => $data) 
{ 
$row_data = explode(':', $data); 


$info[$row]['when']   = $row_data[0]; 
$info[$row]['name']   = $row_data[1]; 
$info[$row]['description'] = $row_data[2]; 


//display data 
echo ' WHEN: ' . $info[$row]['when'] . '<br />'; 
echo ' WHO: ' . $info[$row]['name'] . '<br />'; 
echo ' MESSAGE: ' . $info[$row]['description'] . '<br /><br />'; 

} 
?> 

這工作部分.... 當被執行時的輸出將是:

WHEN:12月31日2014年11月 世衛組織:56 - UserA 消息:您好

時間:31 dec。 2014年11 WHO:56 - 用戶B 消息:您好你

這是接近我想要的,但你可以看到,由於使用分隔符IM「:」它也將削減時間和地點分鐘在誰身上。 如何才能爆炸第二個「:」只?

我希望這有意義嗎?

+0

請告訴我記錄之間的分隔符?樣本數據中沒有顯示新行嗎? – BigScar 2015-02-24 14:06:33

+0

嗯等待我只是意識到,即時通訊在新行上做爆炸....所以是的,每個條目後都有新的行,即使它不顯示爲/ n,看到爆炸確實將​​其切入正確的部分 – defiancenl 2015-02-24 15:17:13

+0

有沒有辦法在每次運行foreach時用空格或「。」代替第一次出現的「:」。爲我所關心的? – defiancenl 2015-02-24 15:26:42

回答

0

看到這是如何爲你工作

<?php 
    $filename = "logfile.txt"; //data file to open 
    $fp = fopen($filename, "r") or die("Couldn't open $filename"); 
    while (! feof($fp)) 
     { 
     $line = fgets($fp, 1024); 
     $line_array = preg_split("/[:-]+/", $line); 
     $line_timestamp = $line_array[0] . ":" . $line_array[1]; 
     $line_user = $line_array[2]; 
     $line_message = $line_array[3]; 
     echo ' WHEN: ' . $line_timestamp . '<br />'; 
     echo ' WHO: ' . $line_user . '<br />'; 
     echo ' MESSAGE: ' . $line_message . '<br /><br />'; 
     } 
    ?>