[c++] libyaml 데이터 구조
libyaml는 YAML 데이터를 읽고 쓰기 위한 C 라이브러리입니다. 이 라이브러리를 사용하여 YAML 포맷으로 된 데이터를 다룰 수 있습니다. 이 포스트에서는 libyaml를 사용하여 데이터를 읽고 구조화하는 방법에 대해 설명하겠습니다.
libyaml 설치하기
먼저 libyaml를 설치해야 합니다. 대부분의 리눅스 시스템에서는 패키지 매니저를 통해 libyaml를 설치할 수 있습니다. 예를 들어, Ubuntu에서는 다음과 같이 설치할 수 있습니다:
sudo apt-get install libyaml-dev
또는 소스 코드를 다운로드 받아 직접 빌드하는 방법도 있습니다.
YAML 데이터 읽기
다음은 libyaml를 사용하여 YAML 데이터를 읽는 간단한 예제입니다.
#include <yaml.h>
#include <stdio.h>
int main() {
FILE *input = fopen("example.yaml", "r");
yaml_parser_t parser;
yaml_event_t event;
yaml_parser_initialize(&parser);
yaml_parser_set_input_file(&parser, input);
do {
if (!yaml_parser_parse(&parser, &event)) {
printf("Parsing failed\n");
return 1;
}
if (event.type != YAML_STREAM_END_EVENT) {
printf("Event type: %d\n", event.type);
}
yaml_event_delete(&event);
} while (event.type != YAML_STREAM_END_EVENT);
yaml_parser_delete(&parser);
fclose(input);
return 0;
}
위 코드는 example.yaml
파일을 열고 YAML 파서를 사용하여 데이터를 읽습니다.
데이터 구조화
YAML 데이터를 읽은 후, 데이터를 적절한 구조에 맞게 정리하여 사용할 수 있습니다.
예를 들어, 아래와 같은 YAML 데이터가 있다고 가정해봅시다:
people:
- name: John
age: 30
- name: Alice
age: 25
이를 구조화하고 출력하는 C 코드는 다음과 같을 수 있습니다:
#include <yaml.h>
#include <stdio.h>
int main() {
FILE *input = fopen("example.yaml", "r");
yaml_parser_t parser;
yaml_event_t event;
yaml_document_t document;
yaml_parser_initialize(&parser);
yaml_parser_set_input_file(&parser, input);
if (!yaml_parser_load(&parser, &document)) {
printf("Failed to load YAML\n");
return 1;
}
yaml_node_t *root = yaml_document_get_root_node(&document);
if (root->type == YAML_SEQUENCE_NODE) {
for (size_t i = 0; i < root->data.sequence.items.top - root->data.sequence.items.start; i++) {
yaml_node_t *entry = yaml_document_get_node(&document, root->data.sequence.items.start[i]);
yaml_node_t *name = yaml_document_get_node(&document, entry->data.mapping.pairs.start[0].key);
yaml_node_t *age = yaml_document_get_node(&document, entry->data.mapping.pairs.start[1].key);
printf("Name: %s, Age: %s\n", name->data.scalar.value, age->data.scalar.value);
}
}
yaml_document_delete(&document);
yaml_parser_delete(&parser);
fclose(input);
return 0;
}
위 코드는 YAML 데이터를 구조화하여 이름과 나이를 출력합니다.
libyaml를 사용하여 YAML 데이터를 읽고 처리하는 방법을 간단히 살펴보았습니다. libyaml를 사용하면 다양한 데이터 형식을 YAML로 표현하고 다양한 프로그램 언어 간에 데이터를 교환할 수 있습니다.
더 많은 libyaml 사용법은 libyaml 공식 문서를 참고하세요.