2016-05-21 5 views
0

したがって、区切り文字に基づいて文字列を分割することは、「ol string.split」を使うと簡単です。今度は開いた中かっこと閉じた中かっこで分割したいとしましょう。また、と単純明快:ネストされた区切り文字の間で文字列をトークン化

var foo = "{foo}{bar}"; 
var splitme = foo.Split(new char[] { '{', '}'}); 

今度は、最初の開口部が/深いnレベルまで、} {閉じる内部にネスト{}を追加することによって、それをより複雑にしてみましょう。私がしてきたのは、ゲーム改造のための独占的なテキストファイル形式(stellaris、great game)のように見えるものを解析しようとしており、私はこのことを解析する良い方法を探しています。括弧で囲まれた(トークン化された)テキストの各部分を保存するにはどうすればよいですか?このミックスに追加することは、関係の指標として=を使用して、ビジネスのキーバリューペアのソートを維持することです。ここで

は、私はこの方法で解析しようとしている何かの例です:

#Neutronium Materials 
tech_ship_armor_5 = { 
    area = engineering 
    cost = @tier3cost4 
    tier = 3 
    category = { materials } 
    ai_update_type = military 
    prerequisites = { "tech_ship_armor_4" "tech_mine_neutronium" } 
    weight = @tier3weight4 

    weight_modifier = { 
     factor = 1.25 
     modifier = { 
      factor = 1.25 
      research_leader = { 
       area = engineering 
       has_trait = "leader_trait_expertise_materials" 
      } 
     } 
    } 

    ai_weight = { 
     modifier = { 
      factor = 1.25 
      research_leader = { 
       area = engineering 
       has_trait = "leader_trait_expertise_materials" 
      } 
     } 
    } 
} 

私の最初のアプローチは、StreamReaderを持つ線で、この不良少年のラインを読み、{何を追跡することでした私は彼らが対応する}で閉じ始める前に走ります。 {}の各塊の中で、私はそれを探し出し、私が見つけたキーバリューペアとそれが階層内に存在する場所を見つけます。これは...理想的ではないようです。いくつかの正規表現の魔法や棚のテキスト解析ライブラリからの方が良い方法がありますか?

+0

このようなANTLR – dman2306

答えて

1

私の最初の考えは、JSONパーサーを見て、それがどのように行われているのか見ることです。

サンプルは、再帰によって最もよく解析されるように見えます。例えば、tech_ship_armor_5はオブジェクトであり、開始タグを取得し、終了タグが存在することを確認し、そこから移動します。

したがってtech_ship_armor_5.areaプロパティの値はengineeringです。 categoryプロパティの値は、独自のプロパティを持つ別のオブジェクトmaterialsになります。

ええと、JSONのような構文解析はこれを行う方法です。

+0

のようなレクサーを使用してください。最初と最後のタグだけをキャプチャし、内部を取り込み、同じことを再帰的に行います。良いアイデア。私は明日の朝にこれを書いておき、いくつかフォローアップするかもしれない?そうでなければ、これは行く方法だと思う。 (プラス私はそれを書くことを完了したら答えを受け入れるよ) –

+0

@BillSambrone:あなたはそれが働いてうれしい。 – InteXX

関連する問題