Jak przeanalizować plik YAML w C++?

Jak przeanalizować plik YAML w C++?
Yaml, czyli „Yaml Ain't Markup Language” to akronim. „Przyjazna dla człowieka serializacja danych” jest celem tego standardu dla wszystkich języków komputerowych. Oznacza to, że pliki YAML można zapisać w formacie, który jest czytelny przez ludzi i praktycznie każdy język ma narzędzia i pakiety, które mogą analizować pliki YAML. Ponieważ wszystkie analizowanie i złapanie błędów są wykonywane przez bibliotekę, a nie przez niekończące się wiersze pracochłonnego kodu, które piszesz, jest to nieco bardziej formalne podejście do obsługi plików argumentów i plików wejściowych dla modeli. Czy Yaml.Składnia org jest przestrzegana przez materiał w YAML i YML. Rozszerzenie YAML lub YML jest bez znaczenia. Oba oferują te same możliwości analizy struktury i scenariuszy. YAML to wymagany format danych utworzony do prostego parsowania maszyn i odczytu maszyn. Podczas gdy JSON i XML są podobnie zorganizowane, YAML jest pełna. W tym artykule przyjrzymy się odczytaniu plików YAML w C ++.

Jak zdobyć bibliotekę YAML w języku C ++?

Porównywalna biblioteka dla C ++, która może wytwarzać i odczytać pliki YAML, nazywa się YAML-CPP. Pary kluczowe są podstawą YAML. Obejmują one kolekcje, tablice asocjacyjne (mapy, słowniki), skalary (liczby całkowite, pływaki, struny i bools) oraz węzły, które są listami zawierającymi wiele kluczy: pary wartości. Dodatkowo YAML popiera tworzenie aliasów i odniesień. Emiter C ++ i parser YAML, który przylega do YAML 1.2 specyfikacja nazywa się YAML-CPP. CMake jest używany przez YAML-CPP w celu ułatwienia budynku międzyplatformowego. Zainstaluj najpierw CMake (Zasoby -> Pobierz), aby kontynuować.

Podstawowe kroki w konstrukcji to: Pamiętaj, aby dodać folder pojemnika do CMake do swojej ścieżki, jeśli zdecydujesz się nie wykorzystać dostępnej instalacji specyficznej dla platformy. Wprowadź katalog źródłowy; Zrób folder kompilacji, a następnie uruchom cmake. Folder YAML-CPP \ Source \ CMake \ YAML-CPP musi być ustawiony na miejsce docelowe po zbudowaniu lub skopiowaniu na preferowaną ścieżkę. Zacznijmy od zapisania zwykłego pliku YAML z produktami nazwy.YAML, więc można go odczytać później za pomocą skryptów C ++. Nasz produkt.Plik YAML zawiera następujące informacje:

Przykład parsowania pliku YAML w programie C ++ za pomocą modułu YAML-CPP

Do odczytu i wyjścia YAML ten skrypt korzysta z biblioteki Libyaml. Podano tutaj ilustrację analizowania kodu YAML. Seria zdarzeń jest produkowana przez parser ze strumienia bajtów wejściowych. Na podstawie „stylu danych” dzielimy interesujące wydarzenia. Ustawmy kilka plików nagłówka, aby uzyskać dostęp do funkcjonalności wdrażania kodu C ++ i YAML-CPP.


Przede wszystkim #include instruuje kompilatora, aby uwzględnić dane stdio w tej konkretnej lokalizacji. Używamy różnych funkcji w c/c ++, takich jak cout, puts () i printf (). Procedury te nie są zdefiniowane przez programista. W bibliotece językowej moduły te są już zdefiniowane. Następny to ignam.H Plik nagłówka, który pochodzi z pakietu YAML-CPP; Możemy uzyskać dostęp do zdarzeń YAML-CPP. Następnie assert.plik biblioteki H, w którym rozważania przez program można zweryfikować za pomocą makra Assert znalezionych w standardowej bibliotece Assert.H Plik nagłówka, który wytworzy komunikat ostrzegawczy, jeśli założenie jest nieprawidłowe. Następnie węzeł nagłówka YAML-CPP.H i parser.H do wykonywania funkcji czytania w C++. Teraz mamy główną funkcję tego kodu. Omów krótko, co zrobiliśmy w naszym głównym kodzie.


Wewnątrz Int Main Function () zadeklarowaliśmy jakąś funkcję, która zawiera plik, który przypisał wskaźnik pliku do otwarcia. Następnie, z yaml_parser_t, zdefiniowaliśmy obiekt parsera. Yaml_parser to architektura parsera w C++. Ma tylko członków wewnętrznych. Rodzina YAML PARSER_FUNCJES służy do zarządzania strukturą. Potem pojawia się Yaml_Document, który jest strukturą do analizowania dokumentu. YAML_NODE_T to struktura typu węzła, która przyjmuje zmienną wskaźnika węzła. Następnie zainicjowaliśmy zmienną z wartością 1, która później iteruje w całej pętli. Plik jest otwierany przez wywołując metodę Fopen w pliku zmiennym, a my minęliśmy „Produkty.Plik YAML ”wewnątrz metody Fopen w trybie odczytu.

Zmienna pliku jest następnie przekazywana wewnątrz metody Assert jako wejście do operacji asercji. Ponownie zastosowaliśmy metodę Assert. Ale tym razem minęliśmy funkcję YAML_PARSER_INITIALIZE, aby zainicjować pusty parser obiektu. Wejście pliku jest ustawiane za pomocą funkcji YAML_PARSER_SET_INPUT_FILE, która przyjmuje odniesienie obiektu Parse i obiekt pliku do odczytu. Aby utworzyć serię dokumentów, które składają się na strumień wejściowy, nazwaliśmy funkcję yaml_parser_load. Jeśli w wygenerowanym dokumencie nie ma węzła głównego, zakończenie dokumentu zostało osiągnięte.


Teraz mamy trochę czasu w implementacji pętli, która iteruje każdy węzeł w dokumencie. W sekcji pętli While mamy zmienną inicjowaną z funkcją yaml_document_get_node. Ta funkcja przyjmuje odniesienie dokumentu i wartość indeksu węzła I. Funkcja zwróciła węzeł dokumentu, jeśli znajduje się w zakresie węzła. Iteracja pęka, jeśli węzeł nie zostanie znaleziony. Następnie zagnieżdżliśmy instrukcje, gdzie w pierwszym instrukcji mamy typ węzła równy Yaml_Scalar_Node. W gnieździe, jeśli instrukcja, zakładaliśmy, że ciąg reprezentuje klucz. W końcu uwolniliśmy pamięć przez funkcję yaml_parser_delete i zamknęła plik.

Poprzedni kod parsera wygenerował następujące dane wyjściowe, które jest w stylu formatu C ++.

Wniosek

Tutaj zamykamy artykuł. Ogólnie opisaliśmy analizowanie plików YAML w języku C ++. Wszystko, co musimy zrobić, to po prostu pobrać moduł YAML-CPP w naszym projekcie CMake, a następnie skorzystać z YAML.H Plik nagłówka w naszym programie. Omówiliśmy przykład, w którym wdrożyliśmy wszystkie możliwe funkcje i ich członków dostarczone przez moduł YAML-CPP do analizowania pliku YAML w C++.