Como Ler Arquivos YAML com C++

🚀 Simples, rápido e prático!


Como Ler Arquivos YAML com C++


O yaml-cpp é um parser para YAML com C++.

Com ele você consegue ler arquivos YAML de forma rápida através do código C++.


Instalação

Para instalar basta clonar com git, compilar e instalar com CMake, rode os comando abaixo:

git clone https://github.com/jbeder/yaml-cpp
cd yaml-cpp
cmake -B build .
cmake --build build
sudo cmake --install build
Veja aqui os arquivos que são instalados
-- Install configuration: ""
-- Installing: /usr/local/lib/libyaml-cpp.a
-- Up-to-date: /usr/local/include
-- Installing: /usr/local/include/yaml-cpp
-- Installing: /usr/local/include/yaml-cpp/emitterstyle.h
-- Installing: /usr/local/include/yaml-cpp/eventhandler.h
-- Installing: /usr/local/include/yaml-cpp/binary.h
-- Installing: /usr/local/include/yaml-cpp/emitterdef.h
-- Installing: /usr/local/include/yaml-cpp/yaml.h
-- Installing: /usr/local/include/yaml-cpp/null.h
-- Installing: /usr/local/include/yaml-cpp/contrib
-- Installing: /usr/local/include/yaml-cpp/contrib/anchordict.h
-- Installing: /usr/local/include/yaml-cpp/contrib/graphbuilder.h
-- Installing: /usr/local/include/yaml-cpp/ostream_wrapper.h
-- Installing: /usr/local/include/yaml-cpp/anchor.h
-- Installing: /usr/local/include/yaml-cpp/parser.h
-- Installing: /usr/local/include/yaml-cpp/emitfromevents.h
-- Installing: /usr/local/include/yaml-cpp/emittermanip.h
-- Installing: /usr/local/include/yaml-cpp/traits.h
-- Installing: /usr/local/include/yaml-cpp/exceptions.h
-- Installing: /usr/local/include/yaml-cpp/fptostring.h
-- Installing: /usr/local/include/yaml-cpp/node
-- Installing: /usr/local/include/yaml-cpp/node/parse.h
-- Installing: /usr/local/include/yaml-cpp/node/type.h
-- Installing: /usr/local/include/yaml-cpp/node/ptr.h
-- Installing: /usr/local/include/yaml-cpp/node/node.h
-- Installing: /usr/local/include/yaml-cpp/node/convert.h
-- Installing: /usr/local/include/yaml-cpp/node/impl.h
-- Installing: /usr/local/include/yaml-cpp/node/emit.h
-- Installing: /usr/local/include/yaml-cpp/node/iterator.h
-- Installing: /usr/local/include/yaml-cpp/node/detail
-- Installing: /usr/local/include/yaml-cpp/node/detail/memory.h
-- Installing: /usr/local/include/yaml-cpp/node/detail/node.h
-- Installing: /usr/local/include/yaml-cpp/node/detail/impl.h
-- Installing: /usr/local/include/yaml-cpp/node/detail/node_data.h
-- Installing: /usr/local/include/yaml-cpp/node/detail/node_iterator.h
-- Installing: /usr/local/include/yaml-cpp/node/detail/iterator_fwd.h
-- Installing: /usr/local/include/yaml-cpp/node/detail/iterator.h
-- Installing: /usr/local/include/yaml-cpp/node/detail/node_ref.h
-- Installing: /usr/local/include/yaml-cpp/dll.h
-- Installing: /usr/local/include/yaml-cpp/stlemitter.h
-- Installing: /usr/local/include/yaml-cpp/noexcept.h
-- Installing: /usr/local/include/yaml-cpp/depthguard.h
-- Installing: /usr/local/include/yaml-cpp/mark.h
-- Installing: /usr/local/include/yaml-cpp/emitter.h
-- Installing: /usr/local/lib/cmake/yaml-cpp/yaml-cpp-targets.cmake
-- Installing: /usr/local/lib/cmake/yaml-cpp/yaml-cpp-targets-noconfig.cmake
-- Installing: /usr/local/lib/cmake/yaml-cpp/yaml-cpp-config.cmake
-- Installing: /usr/local/lib/cmake/yaml-cpp/yaml-cpp-config-version.cmake
-- Installing: /usr/local/lib/pkgconfig/yaml-cpp.pc

Exemplo básico

Suponhamos que você possua esse arquivo de exemplo do tipo YAML: example.yaml:

pessoa:
  nome: Marcos
  sobrenome: Oliveira
  idade: 39
  profissao: Programador
  altura: 1.73

E aqui o código C++ que irá fazer o parser: main.cpp

#include <print>
#include <fstream>
#include <yaml-cpp/yaml.h>

int main(){
  YAML::Node doc = YAML::LoadFile("./example.yaml");

  YAML::Node pessoa = doc["pessoa"];

  std::string nome = pessoa["nome"].as<std::string>();
  std::string sobrenome = pessoa["sobrenome"].as<std::string>();
  int idade = pessoa["idade"].as<int>();
  std::string profissao = pessoa["profissao"].as<std::string>();
  double altura = pessoa["altura"].as<double>();

  std::println("Nome: {}", nome);
  std::println("Sobrenome: {}", sobrenome);
  std::println("Idade: {}", idade);
  std::println("Profissão: {}", profissao);
  std::println("Altura: {}", altura);

  return EXIT_SUCCESS;
}

Lembrando que nesse exemplo usei std::println em vez de iostream.

Compile usando a flag para o yaml-cpp:

g++ main.cpp -lyaml-cpp

E após rodar o binário a saída será:

Nome: Marcos
Sobrenome: Oliveira
Idade: 39
Profissão: Programador
Altura: 1.73

Fácil, né?! Para mais informações acesse o repositório e os exemplos para uso da API.


cppdaily cpp


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!