从文本文件中读取行

时间:2011-08-22 10:12:15

标签: php text

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

<?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

2 个答案:

答案 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

答案 1 :(得分:0)

您可以使用

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

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