2011-08-22 143 views
-3

我收到了一个包含时间表上数据的文本文件。该行包含一个名称和一个部门及其超时/英寸的时间。下面的代码允许我显示整个文本文件,但我想从文件中读取名称和部门的值,并希望显示该值。从文本文件中读取行

<?php 
$file = fopen("C:\Bhrugisha mam.txt","r") or exit("Unable to open file!"); 
while(!feof($file)) 
{ 
echo fgets($file). "<br />"; 
} 
fclose($file); 
?> 

这是从我的文本文件中的一些数据...

               VCANTECH - Log Report 


       6     Bhrugisha Shah 
       Hr 
       Department:   HR 
       August, 2011                       Page 1 of 2 
       ----------------------------------------------------------------------------------------------------------------- 
       Date : 01/Aug/2011   Shift : 1  ( 9:30:00 AM  To  6:30:00 PM ) 
            LOG TIME : 9:23:00 AM     LOG TYPE : IN 
            LOG TIME : 1:55:00 PM     LOG TYPE : OUT 
            LOG TIME : 2:18:00 PM     LOG TYPE : IN 
            LOG TIME : 6:45:00 PM     LOG TYPE : OUT 
+0

那么,为什么你不检查它是否是所需的行(在你的循环中)?另外,请发布一个文件的例子。 –

回答

2

这应该让你有

$input = fread($file, filesize("PATHTOFILE")); 

preg_match("%Department:[\s]{1,}[a-z]{1,}%i", $input, $department); 

var_dump($department); 

//OUTPUT array(1) { [0]=> array(1) { [0]=> string(22) "Department: HR" } 

preg_match_all("%log time : [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2} (AM|PM)     LOG TYPE : (IN|OUT)%i", $input, $matches); 

var_dump($matches); 

/* 
OUTPUT 
array(3) { [0]=> array(4) { [0]=> string(57) "LOG TIME : 9:23:00 AM LOG TYPE : IN" [1]=> string(58) "LOG TIME : 1:55:00 PM LOG TYPE : OUT" [2]=> string(57) "LOG TIME : 2:18:00 PM LOG TYPE : IN" [3]=> string(58) "LOG TIME : 6:45:00 PM LOG TYPE : OUT" } [1]=> array(4) { [0]=> string(2) "AM" [1]=> string(2) "PM" [2]=> string(2) "PM" [3]=> string(2) "PM" } [2]=> array(4) { [0]=> string(2) "IN" [1]=> string(3) "OUT" [2]=> string(2) "IN" [3]=> string(3) "OUT" } } 
*/ 

foreach($matches[0] as $row){ 

    preg_match("%[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2} (AM|PM)%", $row, $logTime); 
    //var_dump($logTime); 
    //OUTPUT array(2) { [0]=> string(10) "9:23:00 AM" [1]=> string(2) "AM" } array(2) { [0]=> string(10) "1:55:00 PM" [1]=> string(2) "PM" } array(2) { [0]=> string(10) "2:18:00 PM" [1]=> string(2) "PM" } array(2) { [0]=> string(10) "6:45:00 PM" [1]=> string(2) "PM" } 
    $logTime = $logTime[0]; 

    preg_match("%(IN|OUT)%",$row, $inOut); 
    var_dump($inOut); 
    //OUTPUT array(2) { [0]=> string(2) "IN" [1]=> string(2) "IN" } array(2) { [0]=> string(3) "OUT" [1]=> string(3) "OUT" } array(2) { [0]=> string(2) "IN" [1]=> string(2) "IN" } array(2) { [0]=> string(3) "OUT" [1]=> string(3) "OUT" } 
    $inOut = $inOut[0]; 

} 

我会建议做一些编辑正则表达式的,因为我只是复制并粘贴的空间。 [\ s] {1,}可以用来代替疯狂的空间:P

+0

它给我错误....它不工作 – malav

+0

什么是错误? –

+0

其实现在你说出来了,出现错误,我刚刚粘贴了你的代码。我正在编辑 –

0

您可以使用

$file = file('filename.txt'); 

它将返回数组包含每一行的每个元素。

+0

这不会显示文件的输出到另一页 – malav

+0

我没有得到你实际上的意思。 – Shameer