2017-07-25 21 views
0

私はレガシーシステムのデータを扱おうとしていますが、これはASCII plist formatのようです。これらを解析したり、フォーマットを扱いやすいように変換する簡単な方法はありますか?理想的には、出力はネストされた配列でなければなりません。PHPでASCII plistファイルを解析する簡単な方法

libraryが存在する(これらのファイルは、プロジェクトファイルGNUstepでとXcodeのために使用されている)が、そのサンプルは、NSDictionaryのAppleのサンプルでも、失敗します。(私のyacc/lexの知識はすぐに試してみて、それを修正するのに十分ではありません。 ...)(これは、任意の引用符で囲まれていない値またはキー名のために失敗した)

Appleのサンプルファイル:

{ 
    AnimalSmells = { pig = piggish; lamb = lambish; worm = wormy; }; 
    AnimalSounds = { pig = oink; lamb = baa; worm = baa; 
        Lisa = "Why is the worm talking like a lamb?"; }; 
    AnimalColors = { pig = pink; lamb = black; worm = pink; }; 
} 

のplistファイルに利用可能なライブラリのみXMLおよびバイナリのplistファイルではなく、ASCIIのものをサポートしているようです。一箇所でレガシーシステムからのいくつかの出力を解析するための完全なライブラリはやり過ぎのように思えるの実装

...

私が見てきたいくつかの他の(非PHP)コードで見醜いアプローチにあります正規表現を使用して、他のメソッドが解析できるようになるまでデータを修正します。リンクライブラリの


Lexer

、これが問題のありそうな部分です:

stringliteral = /\"(\\.|[^\\\"])*\"/ 

(文字列は引用符で囲むことが要求される)(ライブラリが書かれているように見えます特定のユースケースのために、そして私のユースケースは、それとはかなり遠いようです...)

また、異なるソースFILになりplexとレクサーのコンパイルどのようなことが起こるのかをランダムに変更します。

答えて

0

ほぼはJSONと似ています。文字列の置換を試すことができますか? //セミコロンスペース

replace = with :
replace ; with ,
replace ; } with } closed_curly

次に、あなたが配列にそれをjson_decode($string);することができます!

それはあなたにハック感じた場合は、ライブラリーのようなhttps://github.com/rodneyrehm/CFPropertyList

幸運を試してみてください!

+0

CFPropertyListはマニュアルに従ってバイナリとXMLのplistファイルをサポートし、ない前OS X(NEXTSTEPの時間枠)ASCIIのもの... –

+1

ああ!それから、おそらくこのhttps://github.com/chobie/php-plist – delboy1978uk

+0

がもっと役に立つと思うかもしれません...(非常に文書化されていませんが、実際に私のデータを解析しています...回答形式で役立つかもしれません) –

関連する問題