2013-07-20 92 views
0

我需要解析PHP中的文本文件。請參閱下文,我已將其作爲圖片上傳。我需要以黃色獲得田地市場。解析PHP中的文本文件

嘗試了很多方法,但沒有任何信心。有人能幫助我嗎?

感謝

enter image description here

+1

你看過正則表達式嗎?使用preg_match等... –

+3

詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:[**堆棧溢出問題清單**](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – Prix

+0

如果格式與此一致,則可以使用' explode()'將數據拆分成一個數組。數據是逐行顯示的,還是與單行上的每條記錄一起顯示? – 2013-07-20 09:31:53

回答

2

您可以處理與正則表達式和一些符號化的文件。看起來你的字段seperater值是'/',記錄分隔符是'\ r \ n \ r \ n'。

$string = "data"; //lets assume your data is contained in one string 
$records = preg_split("/^[\r\n\s]+$/", $string); 
//this line assume your file contains dos formatting, change to "/\r\r/" for osx and "/\n\n/" for unix 

$data = array(); 
foreach ($records as $record) { 
    $fields = explode("/", $records); 
    $data[] = array($fields[2], $fields[3], $fields[7], $fields[16); 
} 

var_dump($data); 

請注意,記錄分隔符很重要,您需要根據文件編碼進行調整。

更新。我將記錄分隔符改進爲空行而不是連續兩行新行。

+0

當單個字段具有標識符時,按位置提取字段對我來說似乎不是一個好主意。另一方面,OP的格式不是很具體... – Boise

+0

@Boise不是每個字段都有標識符前4個不是 – DevZer0

+0

對我來說它似乎是第一個字段,用'*'表示是一個部分數字或類似的「A0628/541」,或者可能是具有/ 541屬性的「A0628」。然後你有一個日期和時間,用它們的格式「/ yy-mm-dd」和「/ hh H mm」來表示。不管這是否是一個正確的假設,其餘的確有標識符,應該可能被解析爲這樣。 – Boise

0

嘗試以下操作:

$pattern[] = '#[\d]{02}-[\d]{2}-[\d]{2}/[\d]{2}\s[A-Z]{1}\s[\d]{2}#'; 
$pattern[] = '#EVENT=[A-Z]{3,}#'; 
$pattern[] = '#AFLR=[\d]{3}-[\d]{3}#'; 
$res = array(); 
foreach ($pattern as $key => $value){ 
    if (preg_match_all($value, $text, $matches)){ 
     $res[] = $matches[0]; 
    } else { 
     $res[] = NULL; 
    } 
} 

它看起來像EVENTAFLR是變量名都將保持不變,所以我硬編碼的字母。如果情況並非如此,請告訴我。