C++ में CSV के साथ कार्य: लाइब्रेरीज़, पार्सिंग और डेटा लेखन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में CSV के साथ कार्य: लाइब्रेरीज़ और व्यावहारिक उदाहरण

\n\n

CSV (Comma-Separated Values) सारणीबद्ध डेटा भंडारण के लिए सबसे सामान्य प्रारूपों में से एक है। C++ में मानक लाइब्रेरी (C++23 तक) में CSV के लिए अंतर्निहित समर्थन नहीं है, इसलिए डेवलपर्स तृतीय-पक्ष लाइब्रेरीज़ का उपयोग करते हैं या अपने स्वयं के पार्सर लिखते हैं। इस लेख में, हम C++ में CSV के साथ कार्य करने के मुख्य दृष्टिकोणों का विश्लेषण करेंगे: मैन्युअल पार्सिंग से लेकर तैयार समाधानों तक।

\n\n

CSV के लिए लाइब्रेरीज़ की आवश्यकता क्यों है?

\n

CSV फ़ाइलें सरल लगती हैं, लेकिन व्यवहार में इनमें कई छिपी समस्याएँ होती हैं:

\n
    \n
  • फ़ील्ड के अंदर उद्धरण चिह्नों का एस्केपिंग (उदाहरण: "Hello, world")
  • \n
  • बहु-पंक्ति मान
  • \n
  • विभिन्न विभाजक (अल्पविराम, अर्धविराम, टैब)
  • \n
  • विभिन्न एन्कोडिंग (UTF-8, UTF-16, ANSI)
  • \n
\n

तैयार लाइब्रेरीज़ इन समस्याओं का समाधान करती हैं और समय बचाती हैं।

\n\n

1. मैन्युअल CSV पार्सिंग (तृतीय-पक्ष लाइब्रेरीज़ के बिना)

\n

सरल मामलों के लिए, आप स्वयं पार्सर लिख सकते हैं। std::ifstream और std::getline का उपयोग करके CSV पढ़ने का उदाहरण:

\n\n
#include <iostream>\n#include <fstream>\n#include <sstream>\n#include <vector>\n#include <string>\n\nstd::vector<std::vector<std::string>> parseCSV(const std::string& filename) {\n    std::vector<std::vector<std::string>> data;\n    std::ifstream file(filename);\n    std::string line;\n\n    while (std::getline(file, line)) {\n        std::vector<std::string> row;\n        std::stringstream ss(line);\n        std::string cell;\n\n        while (std::getline(ss, cell, ',')) {\n            // अतिरिक्त उद्धरण हटाएँ (सरलीकृत)\n            if (cell.size() >= 2 && cell.front() == '"' && cell.back() == '"') {\n                cell = cell.substr(1, cell.size() - 2);\n            }\n            row.push_back(cell);\n        }\n        data.push_back(row);\n    }\n    return data;\n}
\n\n

कमियाँ: उद्धरणों के अंदर एस्केप किए गए अल्पविराम, बहु-पंक्ति फ़ील्ड, फ़ाइल के अंत में खाली पंक्तियों को संसाधित नहीं करता।

\n\n

2. libcsv लाइब्रेरी (C)

\n

libcsv C में एक हल्की लाइब्रेरी है जो RFC 4180 के अनुसार CSV को सही ढंग से पार्स करती है। उन परियोजनाओं के लिए उपयुक्त जहाँ प्रदर्शन महत्वपूर्ण है।

\n

स्थापना (Linux): sudo apt-get install libcsv-dev

\n\n
#include <csv.h>\n#include <iostream>\n#include <vector>\n\nvoid cb1(void *s, size_t len, void *data) {\n    std::string field(static_cast<char*>(s), len);\n    static_cast<std::vector<std::string>*>(data)->push_back(field);\n}\n\nvoid cb2(int c, void *data) {\n    if (c == CsvRowEnd) {\n        // पंक्ति का अंत — प्रदर्शित करें\n        auto& row = *static_cast<std::vector<std::string>*>(data);\n        for (const auto& f : row) std::cout << f << " | ";\n        std::cout << "\\n";\n        row.clear();\n    }\n}\n\nint main() {\n    FILE *fp = fopen("data.csv", "r");\n    if (!fp) return 1;\n\n    struct csv_parser p;\n    csv_init(&p, CSV_STRICT);\n\n    std::vector<std::string> row;\n    char buf[1024];\n    size_t bytes_read;\n\n    while ((bytes_read = fread(buf, 1, sizeof(buf), fp)) > 0) {\n        csv_parse(&p, buf, bytes_read, cb1, cb2, &row);\n    }\n    csv_fini(&p, cb1, cb2, &row);\n    csv_free(&p);\n    fclose(fp);\n    return 0;\n}
\n\n

3. rapidcsv लाइब्रेरी (C++ header-only)

\n

rapidcsv एक आधुनिक C++17 लाइब्रेरी है जो केवल हेडर फ़ाइलों के साथ काम करती है। यह स्वचालित विभाजक पहचान, विभिन्न डेटा प्रकारों के साथ कार्य और CSV लेखन का समर्थन करती है।

\n

स्थापना: rapidcsv.h को प्रोजेक्ट में कॉपी करें।

\n\n
#include "rapidcsv.h"\n#include <iostream>\n#include <vector>\n\nint main() {\n    // CSV पढ़ना\n    rapidcsv::Docum                    

अनुशंसाएँ