2013-01-20 31 views
1

我有這個文件,我無法弄清楚如何解析這個文件。如何用PHP解析文件

type = 10 
version = 1.2 
PART 
{ 
    part = foobie 
    partName = foobie 
    EVENTS 
    { 
     MakeReference 
     { 
      active = True 
     } 
    } 
    ACTIONS 
    { 
    } 
} 
PART 
{ 
    part = bazer 
    partName = bazer 
} 

我想這是一個數組,它應該像

$array = array(
    'type' => 10, 
    'version' => 1.2, 
    'PART' => array(
     'part' => 'foobie', 
     'partName' => 'foobie, 
     'EVENTS' => array(
      'MakeReference' => array(
       'active' => 'True' 
      ) 
     ), 
     'ACTIONS' => array(
     ) 
    ), 
    'PART' => array(
     'part' => 'bazer', 
     'partName' => 'bazer' 
    ) 
); 

我試着用的preg_match但並不成功。 有什麼建議嗎?

+0

工作一個XML對象,IM格式從哪裏來?爲什麼不使用PHP可以讀取的格式,如JSON,INI,XML等? –

+0

您應該顯示您嘗試過的內容。沒有顯示自己的努力,這真的變成了「請爲我寫這個解析器」類型的問題。 – mario

+2

剛纔我發現格式看起來像TypoScript(由TYPO3使用)。是這樣嗎?如果是這樣,那麼你應該看看TYPO3的解析器。 –

回答

0

這裏是我的做法。

首先改變我改變{到之前的行。 那很容易

$lines = explode("\r\n", $this->file); 
foreach ($lines as $num => $line) { 
    if (preg_match('/\{/', $line) === 1) { 
     $lines[$num - 1] .= ' {'; 
     unset($lines[$num]); 
    } 
} 

現在輸入看起來像這樣

PART { 
    part = foobie 

現在,我們可以使整個事情到XML,而不是,我知道,我說的問題,一個PHP數組,而是一個XML對象仍然不夠好。

foreach ($lines as $line) { 
      if (preg_match('/(.*?)\{$/', $line, $matches)) { 
       $xml->addElement(trim($matches[1])); 
       continue; 
      } 

      if (preg_match('/\}/', $line)) { 
       $xml->endElement(); 
       continue; 
      } 

      if (strpos($line, ' = ') !== false) { 
       list($key, $value) = explode(' = ', $line); 
       $xml->addElementAndContent(trim($key), trim($value)); 
      } 
} 

addElement方法,實際上只是增加了一個爲字符串 的endElement增加和addElementAndContent做既與它們之間也添加內容。

而只是爲了使整個內容是使用

$xml = simplexml_load_string($xml->getXMLasText()); 

現在$ XML是一種XML對象,它是如此容易在什麼地方用:)

1

爲什麼不使用PHP可以本機解碼的格式,比如JSON?

http://php.net/json_decode

$json = file_get_contents("filename.txt"); 
$array = json_decode($json); 
print_r($array); 
+0

也許他沒有別的選擇? – Gumbo

+0

@Gumbo也許。但他可能有!我們將看到 –

+0

我不是該文件的「所有者」,所以它不可能改變格式,我當然會將它改爲ini,json或類似的,如果可能的話 – Martin