2017-07-28 22 views
1

COSアプリケーション内のROSノード用のYAML構成ファイルを作成する必要があります。基本的に、ユーザーはパラメータ値を指定し、YAMLファイルを書き込むために値を取得します。YamlDotNetプラグインからYamlStreamをテキストファイルに保存

@Antoine Aubryの素晴らしいYamlDotNetプラグインの助けを借りてMonoDevelopを開発しています。しかし、この質問から始めて:Build a Yaml document dynamically from c#、私はYAML文書をコンソールに出力するのではなく、単純なテキストファイルに保存する方法を見つけることができません。

私はStreamWriter、TextWriter、Byte Converterを見てきました。私はここで少し失われています。 私は、私が試した最後のものは、このだったhttps://dotnetfiddle.net/0raqgN

var address = new YamlMappingNode(
     new YamlScalarNode("street"), new YamlScalarNode("123 Tornado Alley\nSuite 16") { Style = YamlDotNet.Core.ScalarStyle.Literal }, 
     new YamlScalarNode("city"), new YamlScalarNode("East Westville"), 
     new YamlScalarNode("state"), new YamlScalarNode("KS") 
    ) { Anchor = "main-address" }; 

    var stream = new YamlStream(
     new YamlDocument(
      new YamlMappingNode(
       new YamlScalarNode("repeipt"), new YamlScalarNode("Oz-Ware Purchase Invoice"), 
       new YamlScalarNode("date"), new YamlScalarNode("2007-08-06"), 
       new YamlScalarNode("customer"), new YamlMappingNode(
        new YamlScalarNode("given"), new YamlScalarNode("Dorothy"), 
        new YamlScalarNode("family"), new YamlScalarNode("Gale") 
       ), 
       new YamlScalarNode("items"), new YamlSequenceNode(
        new YamlMappingNode(
         new YamlScalarNode("part_no"), new YamlScalarNode("A4786"), 
         new YamlScalarNode("descrip"), new YamlScalarNode("Water Bucket (Filled)"), 
         new YamlScalarNode("price"), new YamlScalarNode("1.47"), 
         new YamlScalarNode("quantity"), new YamlScalarNode("4") 
        ), 
        new YamlMappingNode(
         new YamlScalarNode("part_no"), new YamlScalarNode("E1628"), 
         new YamlScalarNode("descrip"), new YamlScalarNode("High Heeled \"Ruby\" Slippers"), 
         new YamlScalarNode("price"), new YamlScalarNode("100.27"), 
         new YamlScalarNode("quantity"), new YamlScalarNode("1") 
        ) 
       ), 
       new YamlScalarNode("bill-to"), address, 
       new YamlScalarNode("ship-to"), address, 
       new YamlScalarNode("specialDelivery"), new YamlScalarNode("Follow the Yellow Brick\nRoad to the Emerald City.\nPay no attention to the\nman behind the curtain.") { Style = YamlDotNet.Core.ScalarStyle.Literal } 
      ) 
     ) 
    ); 

このフィドルに、この例のコードを使用しています:

StreamWriter sw = new StreamWriter (@"/home/guillaume/test_yaml.yaml"); 
stream.Save (sw); 

しかし、空のままでtest_yaml.yamlファイル(0オクテット)ごといまいましい時間、私はそれが次のようになりたいのに対し:これはnoobの質問のように見える場合は申し訳ありません

repeipt: Oz-Ware Purchase Invoice 
    date: 2007-08-06 
    customer: 
    given: Dorothy 
    family: Gale 
    items: 
    - part_no: A4786 
    descrip: Water Bucket (Filled) 
    price: 1.47 
    quantity: 4 
    - part_no: E1628 
    descrip: High Heeled "Ruby" Slippers 
    price: 100.27 
    quantity: 1 
    bill-to: &main-address 
    street: |- 
     123 Tornado Alley 
     Suite 16 
    city: East Westville 
    state: KS 
    ship-to: *main-address 
    specialDelivery: |- 
    Follow the Yellow Brick 
    Road to the Emerald City. 
    Pay no attention to the 
    man behind the curtain. 
    ... 

+0

あなたが現在持っているものを表示すると役立ちます。それをコンソールに出力することができれば、文字列を作成する方法を知っていると思います。そこからは非常に簡単です。 'string text ="ヤムのもの "; File.WriteAllText(@ "C:\ txt.txt"、text); '、しかし、もう一度、あなたが既に持っているコードを提供してください。 –

答えて

0

回答なしでこれを見つける人々には、another answer usefulが見つかりました。要するに、Saveコール以外はすべて正しいです。この他の答えから抜粋したのは、ファイルに実際にYAMLが含まれている点です。

using (TextWriter writer = File.CreateText("C:\\temp\\some-file.yaml")) { 
    yaml.Save(writer, false); 
} 
関連する問題