2015-02-24 221 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 />'; 
     } 
    ?>