2013-07-20 59 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是变量名都将保持不变,所以我硬编码的字母。如果情况并非如此,请告诉我。