Swift (iOS/macOS) में CSV के साथ कार्य: सरल से जटिल तक
\n\nCSV (Comma-Separated Values) सारणीबद्ध डेटा के आदान-प्रदान के लिए सबसे सामान्य प्रारूपों में से एक है। इसका उपयोग Excel, Google Sheets, डेटाबेस और सरल लॉग से निर्यात के लिए किया जाता है। Swift (iOS, macOS, watchOS, tvOS) इकोसिस्टम में CSV के साथ कार्य करने के लिए कोई अंतर्निहित मॉड्यूल नहीं है, लेकिन कई सिद्ध लाइब्रेरीज़ हैं जो इस प्रक्रिया को काफी सरल बनाती हैं। इस लेख में, हम सर्वोत्तम टूल्स पर विचार करेंगे और कोड के कई उदाहरण लिखेंगे।
\n\nCSV पार्सर स्वयं क्यों नहीं लिखना चाहिए?
\nपहली नज़र में CSV सरल लगता है: स्ट्रिंग को अल्पविराम से विभाजित करें - और हो गया। हालाँकि, व्यवहार में कठिनाइयाँ उत्पन्न होती हैं:
\n- \n
- फ़ील्ड में अंदर अल्पविराम हो सकते हैं (उदाहरण के लिए,
"Smith, John")। \n - फ़ील्ड उद्धरण चिह्नों में लिपटे हो सकते हैं, और उद्धरणों के अंदर एस्केप किए गए उद्धरण (
"") हो सकते हैं। \n - विभिन्न सिस्टम विभिन्न विभाजकों (अल्पविराम, अर्धविराम, टैब) का उपयोग करते हैं। \n
- एन्कोडिंग (UTF-8, UTF-16, Windows-1251) के साथ समस्याएँ। \n
इसलिए, production कोड के लिए तैयार लाइब्रेरी का उपयोग करने की दृढ़ता से अनुशंसा की जाती है।
\n\nSwift में CSV के लिए सर्वश्रेष्ठ लाइब्रेरीज़
\n\n1. SwiftCSV (Naoto Kaneko द्वारा)
\nसबसे लोकप्रिय और हल्की लाइब्रेरीज़ में से एक। पढ़ने और लिखने का समर्थन करती है, स्वचालित रूप से उद्धरणों और एस्केपिंग को संभालती है। Swift Package Manager (SPM) और CocoaPods के माध्यम से काम करती है।
\n// SPM के माध्यम से कनेक्शन: .package(url: "https://github.com/naoty/SwiftCSV.git", from: "0.9.0")\n\n2. CodableCSV (Dehesa द्वारा)
\nएक आधुनिक लाइब्रेरी जो Codable प्रोटोकॉल के साथ एकीकृत होती है। CSV को सीधे Swift संरचनाओं में पार्स करने की अनुमति देती है। उन परियोजनाओं के लिए आदर्श जहाँ डेटा में सख्त टाइपिंग है।
// कनेक्शन: .package(url: "https://github.com/dehesa/CodableCSV.git", from: "0.6.0")\n\n3. CSwift
\nन्यूनतम API के साथ एक सरल और तेज़ लाइब्रेरी। छोटी परियोजनाओं या तेज़ प्रोटोटाइपिंग के लिए उपयुक्त।
\n\nउदाहरण 1: SwiftCSV के साथ CSV पढ़ना
\nमान लीजिए, हमारे पास users.csv फ़ाइल है:
id,name,email\n1,Иван Иванов,ivan@example.com\n2,Мария Петрова,maria@example.com\n3,Джон Доу,"john.doe@example.com"\n\nपढ़ने के लिए कोड:
\nimport SwiftCSV\n\nguard let csvURL = Bundle.main.url(forResource: "users", withExtension: "csv") else {\n print("फ़ाइल नहीं मिली")\n return\n}\n\ndo {\n let csv = try CSV(url: csvURL)\n // शब्दकोशों की सरणी के रूप में पंक्तियों तक पहुँच\n for row in csv.rows {\n if let id = row["id"], let name = row["name"], let email = row["email"] {\n print("ID: \\(id), नाम: \\(name), ईमेल: \\(email)")\n }\n }\n // या कॉलम के अनुसार पहुँच\n print("सभी नाम: \\(csv.columns["name"] ?? [])")\n} catch {\n print("पार्सिंग त्रुटि: \\(error)")\n}\n\nउदाहरण 2: SwiftCSV के साथ CSV लिखना
\nimport SwiftCSV\n\nlet headers = ["नाम", "आयु", "शहर"]\nlet rows = [\n ["अन्ना", "28", "मॉस्को"],\n ["बोरिस", "35", "सेंट पीटर्सबर्ग"],\n ["विक्टर", "22", "नोवोसिबिर्स्क"]\n]\n\ndo {\n let csv = try CSV(string: "", headers: headers, rows: rows)\n let csvString = csv.output // CSV स्ट्रिंग प्राप्त करें\n print(csvString)\n // फ़ाइल में सहेजें\n let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]\n let fileURL = documentsPath.appendingPathComponent("output.csv")\n try csvString.write(to: fileURL, atomically: true, encoding: .utf8)\n print("फ़ाइल सहेजी गई: \\(fileURL)")\n} catch {\n print("लिखने में त्रुटि: \\(error)")\n}\n\nउदाहरण 3: CodableCSV — संरचनाओं में पार्सिंग
\nयह उदाहरण दिखाता है कि CSV को डेटा मॉडल के साथ कितनी आसानी से एकीकृत किया जा सकता है:
\nimport CodableCSV\n\nstruct User: Decodable {\n let id: Int\n let name: String\n let email: String\n}\n\