2012-02-16 7 views
1

正しいデータ構造体enum/struct/classを選択していますか?私はこのようなファイルの構文解析しています

test_data = { 
{ 
    id = '001-000505', 
    cnv = { 
    e9 = 0, 
    i6 = 0, 
    }, 
    rel = { 
    rs10850985 = '-', 
    rs38932097 = '-', 
    rs5030655 = '-', 
    rs10655852 = '-', 
    rs28371725 = '-', 
    }, 
    result = '*5/*5', 
    gt = { 
    rs31080985 = { '-', '-' }, 
    rs16947 = { '-', '-' }, 
    rs3892097 = { '-', '-' }, 
    rs503350655 = { '-', '-' }, 
    rs50530865 = { '-', '-' }, 
    rs5030656 = { '-', '-' }, 
    rs106371706 = { '-', '-' }, 
    rs59421388 = { '-', '-' }, 
    rs7693258 = { '-', '-' }, 
    rs28371725 = { '-', '-' }, 
    }, 
}, 
{ 
    id = '004-AATTGG', 
    cnv = { 
    e9 = 1, 
    i6 = 1, 
    }, 
    rel = { 
    rs1080985 = '>>', 
    rs3892097 = '>>', 
    rs505306d55 = '>>', 
    rs1065852 = '>>', 
    rs2837d1725 = '>>', 
    }, 
    result = '*1/*5', 
    gt = { 
    rs10830985 = { 'C', 'C' }, 
    rs164947 = { 'C', 'C' }, 
    rs3892097 = { 'G', 'G' }, 
    rs5030e655 = { 'T', 'T' }, 
    rs5030865 = { 'G', 'G' }, 
    rs5030656 = { 'AAG', 'AAG' }, 
    rs1065852 = { 'C', 'C' }, 
    rs28371706 = { 'C', 'C' }, 
    rs59421388 = { 'G', 'G' }, 
    rs769258 = { 'G', 'G' }, 
    rs28371725 = { 'G', 'G' }, 
    }, 
}, 
{ 
    id = '003-0300101', 
    cnv = { 
    e9 = 1, 
    i6 = 1, 
    }, 
    rel = { 
    rs1080985 = '>>', 
    rs3892097 = '>>', 
    rs50530655 = '>>', 
    rs10365852 = '>>', 
    rs283271725 = '<<', 
    }, 
    result = '*41/*5', 
    gt = { 
    rs1080985 = { 'C', 'C' }, 
    rs16947 = { 'T', 'T' }, 
    rs3892097 = { 'G', 'G' }, 
    rs5030655 = { 'T', 'T' }, 
    rs5030865 = { 'G', 'G' }, 
    rs5030656 = { 'AAG', 'AAG' }, 
    rs1065852 = { 'C', 'C' }, 
    rs28371706 = { 'C', 'C' }, 
    rs593421388 = { 'G', 'G' }, 
    rs7659258 = { 'G', 'G' }, 
    rs28371725 = { 'A', 'A' }, 
    }, 
}, 
{ 
    id = '007-CCAA', 
    cnv = { 
    e9 = 1, 
    i6 = 1, 
    }, 
    rel = { 
    rs1080985 = '>>', 
    rs38922097 = '>>', 
    rs50350655 = '>>', 
    rs1065852 = '>>', 
    rs283371725 = '<<', 
    }, 
    result = '*41/*5', 
    gt = { 
    rs1080985 = { 'C', 'C' }, 
    rs16947 = { 'T', 'T' }, 
    rs3892097 = { 'G', 'G' }, 
    rs50350655 = { 'T', 'T' }, 
    rs50350865 = { 'G', 'G' }, 
    rs5030656 = { 'AAG', 'AAG' }, 
    rs106235852 = { 'C', 'C' }, 
    rs28371706 = { 'C', 'C' }, 
    rs59421388 = { 'G', 'G' }, 
    rs769258 = { 'G', 'G' }, 
    rs28371725 = { 'A', 'A' }, 
    }, 
}, 
{ 
    id = '001-000105', 
    cnv = { 
    e9 = 1, 
    i6 = 1, 
    }, 
    rel = { 
    rs1080985 = '>>', 
    rs38392097 = '>>', 
    rs5030655 = '>>', 
    rs10565852 = '>>', 
    rs283371725 = '>>', 
    }, 
    result = '*1/*5', 
    gt = { 
    rs10820985 = { 'C', 'C' }, 
    rs16947 = { 'C', 'C' }, 
    rs32892097 = { 'G', 'G' }, 
    rs53030655 = { 'T', 'T' }, 
    rs50303865 = { 'G', 'G' }, 
    rs50530656 = { 'AAG', 'AAG' }, 
    rs1065852 = { 'C', 'C' }, 
    rs283751706 = { 'C', 'C' }, 
    rs59421388 = { 'G', 'G' }, 
    rs769258 = { 'G', 'G' }, 
    rs28371725 = { 'G', 'G' }, 
    }, 
}, 

を私はこのすべてのデータを解析し、データ構造のいくつかの種類でそれをキャプチャする必要があります。私は私がする必要があるため、これは可能ではないでしょう

string somestring=LuaStructure.gt.rs1080985; 

言いたいと思うので、これは適切なソリューションであると思ういけない

struct LuaStructure 
    { 
     public string id { get; set; } 

     public struct cnv 
     { 
      public string e9 { get; set; } 
      public string x9 { get; set; } 
      public string i6 { get; set; } 
     } 
     public struct rel 
     { 
      public string rs1080985 { get; set; } 
      public string rs3892097 { get; set; } 
      public string rs5030655 { get; set; } 
      public string rs1065852 { get; set; } 
      public string rs28371725 { get; set; } 
     } 

     public string result { get; set; } 

     public struct gt 
     { 
      public string rs1080985 { get; set; } 
      public string rs16947 { get; set; } 
      public string rs3892097 { get; set; } 
      public string rs5030655 { get; set; } 
      public string rs5030865 { get; set; } 
      public string rs5030656 { get; set; } 
      public string rs1065852 { get; set; } 
      public string rs28371706 { get; set; } 
      public string rs59421388 { get; set; } 
      public string rs769258 { get; set; } 
      public string rs28371725 { get; set; } 
     } 

    } 

:ここ

は私が思い付いたものです最初に宣言します。

LuaStructure somestructure = new LuaStructure; 

その後、私は私がデータをキャプチャする必要がありますクラス/構造体/列挙型のものを組み合わせ

にこの全体のプロセスを通過する必要がありますする必要はいけない

LuaStructure.gt somestructuregt = new LuaStructure.gt; 

を行う必要があります私は欲しいですか?

+1

その構造はひどいです。幸運を祈って... **オブジェクト作成時にプロパティ初期化子を使用することを検討しましたか?** – Yuck

+0

@Yuckあなたはそれほど恐ろしいですか何かをより使いやすくすることができますか? –

+0

@yuck私はネストされたデータのイニシャライザを行う方法を理解していません。 –

答えて

1

プロパティ/タイプに明示的な解析と割り当てが必要なので、structでこれを行うことは恩恵を受けません。私はこれを避ける傾向がありますが、形式がかなり近いので、RegExや基本的な文字列操作を使用して実際に入力をJSONに変換すると効果的です。そうすることで、少なくとも、既存のパーサを活用して、重い荷物を扱うことができます。

+0

あなたの答えにはとても感謝します。私は正規表現でこれをどうやって行うことができますか? –

+0

あなたの質問の範囲から少し外れているようです(あなた自身でそれを理解しようとした後、別の質問をする必要があります)。また、私はRegExについてアドバイスをしたくありません(後に続く人のためにちょっとしたことを知っています)。 JSON仕様を見てください。書式設定はほぼ一致しており、簡単な文字列の操作はそのトリックを行う可能性が高いです。 –

+0

ありがとうございます。それはどのように一致するか教えてくださいできますか?それは私にマッチするように見えません –