C++ में YAML के साथ कार्य: yaml-cpp लाइब्रेरी
YAML (YAML Ain't Markup Language) एक मानव-पठनीय डेटा सीरियलाइज़ेशन प्रारूप है, जिसका उपयोग अक्सर कॉन्फ़िगरेशन फ़ाइलों, डेटा आदान-प्रदान और संरचित जानकारी के भंडारण के लिए किया जाता है। C++ में YAML के साथ काम करने के लिए एक शक्तिशाली और उपयोग में आसान लाइब्रेरी yaml-cpp मौजूद है। इस लेख में, हम विस्तार से देखेंगे कि YAML दस्तावेज़ों को पार्स करने और बनाने के लिए yaml-cpp को कैसे स्थापित, कॉन्फ़िगर और उपयोग किया जाए।
yaml-cpp की स्थापना
yaml-cpp लाइब्रेरी अधिकांश प्लेटफार्मों के लिए उपलब्ध है। इसे स्थापित करने का सबसे आसान तरीका पैकेज मैनेजर के माध्यम से है:
- Ubuntu/Debian:
sudo apt-get install libyaml-cpp-dev - macOS (Homebrew):
brew install yaml-cpp - Windows (vcpkg):
vcpkg install yaml-cpp
GitHub से रिपॉजिटरी डाउनलोड करके और CMake का उपयोग करके स्रोत से भी संकलित किया जा सकता है:
git clone https://github.com/jbeder/yaml-cpp.gitcd yaml-cppmkdir build && cd buildcmake ..makesudo make installyaml-cpp के साथ मूल बातें
लाइब्रेरी YAML डेटा को लोड करने, संशोधित करने और सहेजने के लिए एक सहज API प्रदान करती है। सभी डेटा प्रकार YAML::Node कंटेनर में संग्रहीत होते हैं, जो एक स्केलर, अनुक्रम (सरणी) या मैपिंग (शब्दकोश) हो सकता है।
YAML फ़ाइल का उदाहरण
निम्नलिखित कॉन्फ़िगरेशन फ़ाइल config.yaml पर विचार करें:
database: host: localhost port: 5432 name: myapp credentials: user: admin password: secret123
server: workers: 4 timeout: 30.5 debug: true
allowed_ips: - 192.168.0.1 - 192.168.0.2 - 10.0.0.1YAML फ़ाइल को पार्स करना
फ़ाइल से डेटा लोड करने के लिए YAML::LoadFile() फ़ंक्शन का उपयोग किया जाता है:
#include <yaml-cpp/yaml.h>#include <iostream>#include <string>#include <vector>
int main() { try { // YAML फ़ाइल लोड करें YAML::Node config = YAML::LoadFile("config.yaml");
// [] ऑपरेटर के माध्यम से नेस्टेड डेटा तक पहुंच std::string host = config["database"]["host"].as<std::string>(); int port = config["database"]["port"].as<int>(); std::string user = config["database"]["credentials"]["user"].as<std::string>();
std::cout << "Database host: " << host << std::endl; std::cout << "Database port: " << port << std::endl; std::cout << "User: " << user << std::endl;
// अनुक्रम (सूची) के साथ कार्य YAML::Node ips = config["allowed_ips"]; std::vector<std::string> ipList; for (const auto& ip : ips) { ipList.push_back(ip.as<std::string>()); }
std::cout << "Allowed IPs: "; for (const auto& ip : ipList) { std::cout << ip << " "; } std::cout << std::endl;
} catch (const YAML::Exception& e) { std::cerr << "YAML Error: " << e.what() << std::endl; return 1; }
return 0;}YAML बनाना और सीरियलाइज़ करना
yaml-cpp प्रोग्रामेटिक रूप से YAML दस्तावेज़ बनाने और उन्हें फ़ाइल में सहेजने की भी अनुमति देता है:
#include <yaml-cpp/yaml.h>#include <fstream>
int main() { // रूट नोड बनाएं YAML::Node config;
// डेटा जोड़ें config["application"]["name"] = "MyApp"; config["application"]["version"] = 2.1; config["application"]["debug"] = false;
// एक अनुक्रम बनाएं config["features"].push_back("logging"); config["features"].push_back("caching"); config["features"].push_back("auth");
// वी