YAML будет использоваться между C ++ и Perl - PullRequest
3 голосов
/ 15 декабря 2011

Я пытаюсь проанализировать вывод файла YAML из Perl YAML::Tiny, используя C ++.Как новичок в C ++ и YAML, я использую HowToParseADocument в качестве отправной точки.

Файл monsters.yaml, если он создан с использованием YAML::Tiny, выглядит следующим образом:

---
name: Ogre
position: [0, 5, 0]
powers:
  - name: Club
    damage: 10
  - name: Fist
    damage: 8
---
name: Dragon
position: [1, 0, 10]
powers:
  - name: Fire Breath
    damage: 25
  - name: Claws
    damage: 15
---
name: Wizard
position: [5, -3, 0]
powers:
  - name: Acid Rain
    damage: 50
  - name: Staff
    damage: 3

Я ищу помощь по изменению примера в HowToParseADocument для чтения в измененном файле YAML с --- в качестве разделителя для каждой записи.Я скопировал основной код C ++ ниже.

int main()
{
   std::ifstream fin("monsters.yaml");
   YAML::Parser parser(fin);
   YAML::Node doc;
   parser.GetNextDocument(doc);
   for(unsigned i=0;i<doc.size();i++) {
      Monster monster;
      doc[i] >> monster;
      std::cout << monster.name << "\n";
   }

   return 0;
}

1 Ответ

4 голосов
/ 15 декабря 2011

Разделитель --- разбивает файл YAML на несколько документов (в отличие от одного документа, состоящего из последовательности, как в примере).

Вы можете проанализировать его следующим образом:

int main()
{
   std::ifstream fin("monsters.yaml");
   YAML::Parser parser(fin);
   YAML::Node doc;
   while(parser.GetNextDocument(doc)) {
      Monster monster;
      doc >> monster;
      std::cout << monster.name << "\n";
   }

   return 0;
}
...