2017-07-06 20 views
0

.yamlファイルにあります。私は、私は1つに2つのfloat数(x、y)を格納したい、私の質問は、私はyamlファイルに[x、y]を保存するには

world: 

     radius: 20 
     [-30, -70] 

基本的には、以下の形式で保存することができている

world:  

    radius: 20 
     x: -70 
     y: -30 

にX、Yを保存する方法を知っていますライン。 C言語で

Iプログラム++シーケンスを放射する場合

+1

A)YAMLライブラリを使用してください。 B)ライブラリのドキュメントに従ってYAMLに値を追加します。 – tadman

答えて

1

いいえすることはできません、ではないあなたが記述の方法でを生成します。あなたはPythonがインストールされている場合は、簡単にvirtualenvのとdo¹をインストールすることで、オンラインYAMLパーサにあなたの必要な出力を貼り付けて(例えばthis 1)であることをテストしたりすることができます

pip install ruamel.yaml.cmd 
yaml round-trip input.yaml 

あなたの要求出力があり、上部に(キーradiusと値20を持つ)マッピングであることから値が始まるキーworldとのマッピングは、フロースタイルシーケンス[-30, -70]に切り替わります。これは間違っています。シーケンスにキーと値のペアをマッピングすることはできません。

これを修正する方法はいくつかあります。あなたは行うことができます。完全に罰金YAMLである

world: 
    radius: 20 
    [-30, -70]: 

、ペア-30, -70が明示的にする必要はありません値nullための鍵であること。いくつかのYAMLパーサは、このフォームをサポートしていないことに注意してください。

ザ・、IMO、最も論理的な1行のソリューション:

#include <iostream> 
#include "yaml-cpp/yaml.h" 

int main() 
{ 
    YAML::Emitter out; 
    out << YAML::BeginMap; 
    out << YAML::Key << "world"; 
    out << YAML::Value << YAML::BeginMap; 
    out << YAML::Key << "radius"; 
    out << YAML::Value << 20; 
    out << YAML::Key << YAML::Flow << YAML::BeginSeq << "x" << "y" << YAML::EndSeq; 
    out << YAML::Key << YAML::Flow << YAML::BeginSeq << "-30" << "-70" << YAML::EndSeq; 

    std::cout << out.c_str() << "\n"; 
    return 0; 
} 

あなたの最初のYAMLの例が同様に無効YAMLです:あなたがすべきコンパイルと実行することによって取得することができます

world: 
    radius: 20 
    [x, y]: [-30, -70] 

マッピングのキーはなくコロンを整列:

world:  

    radius: 20 
    x: -70 
    y: -30 

¹免責事項:私はruamel.yaml.cmdパッケージの著者です。 YAMLファイルに機密データが含まれている場合、ローカルテストを使用することは重要です。

1

、あなたはYAML::Flowでそれを前置きすることができます。 documentationから:

YAML::Emitter out; 
out << YAML::Flow; 
out << YAML::BeginSeq << 2 << 3 << 5 << 7 << 11 << YAML::EndSeq; 

[2, 3, 5, 7, 11] 
関連する問題