2013-01-23 49 views
1

我有一個很大的文本文件,其中包含許多人的姓名,地點和出生日期。我需要根據字符大小來查找名稱。我怎樣才能用PHP做到這一點?如何使用PHP在文本文件中搜索特定數量的字母?

在文本文件中,數據被組織這樣的:

Name-Location         ID     DOB 
    Bob-LA          110     12/01/1987 
    Lia-CA          111     11/09/1984 
    Neil-LA          112     17/10/1982 
    Emon-CA          113     07/12/1991 
    Elita-CA          113     13/06/1983 
    Ron-CA          114     16/02/1979 
    and so on 

現在我想搜索的人有一定的角色名,並用同一個位置(比如說我希望能夠找到所有的名字有4人來信來自CA [Emon-CA])。我怎樣才能做到這一點? 我通常可以使用PHP搜索文件,在那裏我知道我正在尋找的字符串。但在這裏,我實際上不知道如何設定條件來顯示我想要的結果。有人可以幫幫我嗎? 在此先感謝。

+0

你是怎麼寫的那樣對準ID/DOB和名字?如果你有一個文本文件?或者他們都在一條線上? – samayo

+0

使用'csv-file'打開文件並運行結果,剝離-CA,並且如果字符串中存在'-CA',請計算名稱中的字符數,如果是4則存儲它.. –

+0

我的建議因爲你需要以csv格式獲取數據並將其插入到數據庫中。它會讓你的生活變得更輕鬆。但是,如果您選擇仍使用該文本文件,則可以嘗試使用正則表達式來查找您要查找的內容。 – tftd

回答

1

您可以嘗試

$filename = "log.txt"; 

foreach (new TextFileFilterIterator($filename) as $line) { 
    list($name, $location, $id, $dob) = $line; 
    if (strlen($name) == 4 && $location == "CA") { 
     echo implode(",", $line), PHP_EOL; 
    } 
} 

輸出

Emon,CA,113,07/12/1991 

類用於

class TextFileFilterIterator extends ArrayIterator { 
    private $filter; 

    function __construct($filename) { 
     parent::__construct(array_filter(array_map("trim", file($filename)))); 
    } 

    public function current() { 
     $c = array_filter(explode(" ", parent::current())); 
     list($n, $l) = explode("-", array_shift($c)); 
     array_unshift($c, $n, $l); 
     return array_map("trim", $c); 
    } 

} 
+0

非常感謝。有效。我只需要打印這個名字。怎麼做? –

+0

'echo $ name'可以做到這一點 – Baba

0

我建議使用正則表達式,是這樣的:如果你只是想算結果

$count = preg_match_all('|^\s*([\w]{'.$namelength.'})-'.$location.'\s*(\d+)\s*(\d{2}/\d{2}/\d{4})$|',$text,$matches); 

否則,如果你想要做的事與每場比賽

// assume $text contains the contents of your text file 
$namelength = 4; // change this as needed 
$location = 'CA'; // again, change as needed 

if(preg_match_all('|^\s*([\w]{'.$namelength.'})-'.$location.'\s*(\d+)\s*(\d{2}/\d{2}/\d{4})$|',$text,$matches)){ 
    foreach($matches as $match){ 
     $name = $match[1]; 
     $id = $match[3]; 
     $dob = $match[4]; 
     // Do something with each name. 
    } 
} 
相關問題