[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 공식 문서를 참고하세요.