Как загрузить файл YAML через yaml-cpp?

Я очень новичок в yaml-cpp, пробовал самую простую программу, но потерпел неудачу, а также не нашел ответа на сайте автора google/github.

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

using namespace std;

int main()
{
    YAML::Node config = YAML::LoadFile("sample.yaml");
    return 0;
}

Образец sample.yaml с официального сайта YAML

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

Сообщение об ошибке выдается следующим образом:

libc++abi.dylib: завершение с необработанным исключением типа YAML::BadFile: yaml-cpp: ошибка в строке 0, столбец 0: плохой файл

Могу я узнать, в чем проблема? Это проблема создания библиотеки, проблема с синтаксисом YAML или проблема с использованием API?

Среда разработки

MacOSX10.9 c++11 IDE:QtCreator3.0.1 yaml-cpp 0.5.1


[Решено]
Я совершил глупую ошибку, загрузив неверный путь к sample.yaml.


person user001    schedule 16.04.2014    source источник


Ответы (3)


Похоже, что yaml-cpp не может найти ваш файл. Удалось ли вам загрузить какой-либо файл? Убедитесь, что файл находится в рабочем каталоге вашей программы, и ради здравомыслия убедитесь, что вы можете сначала загрузить очень простой файл.

person Jesse Beder    schedule 16.04.2014
comment
спасибо @Джесси. Моя глупая ошибка, проблема пути sample.yaml. - person user001; 17.04.2014

Я думаю, что синтаксический анализатор YAML в версии yaml-cpp, которую вы используете, просто недостаточно продвинут, чтобы обработать первую строку вашего примера файла. Пример файла пытается проиллюстрировать довольно много более продвинутых функций YAML. Кажется, что ваш парсер не может обработать их все. Я предлагаю вам начать с более простого файла примера.

Я проверил ваш файл тремя онлайн-валидаторами и получил следующие результаты:

Без сомнения, файл является допустимым YAML, но это не означает, что все существующие парсеры могут его анализировать!

person David Heffernan    schedule 16.04.2014
comment
Спасибо за ваше объяснение. yaml-cpp 0.5.1 поддерживает Yaml1.2, поэтому я предположил, что он может понимать sample.yaml. Позже я попробую какой-нибудь файл yaml с синтаксисом 1.0. - person user001; 16.04.2014
comment
также проголосуйте за, спасибо за предоставление полезной информации. - person user001; 17.04.2014

Ваш файл yaml должен находиться там, где находится ваше конечное состояние, в зависимости от указанного вами пути.

person hal9000    schedule 08.11.2018