2011-08-22 155 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