Arbeiten mit CSV in Swift (iOS/macOS): Bibliotheken, Parsing und Beispiele
CSV (Comma-Separated Values) ist eines der am weitesten verbreiteten Formate für den Austausch von Tabellendaten. Im Apple-Ökosystem (iOS, macOS, watchOS) wird die Arbeit mit CSV häufig für den Import/Export von Daten, das Laden von Konfigurationen oder die Verarbeitung von Logs benötigt. In diesem Artikel betrachten wir die wichtigsten Ansätze zur Arbeit mit CSV in Swift: manuelles Parsing, beliebte Bibliotheken (SwiftCSV und CodableCSV) sowie Codebeispiele mit Erklärungen.
1. Warum sollte man Bibliotheken für CSV verwenden?
Die Standardbibliothek Foundation bietet keine vorgefertigten Mittel für die Arbeit mit CSV. Manuelles Parsing (Aufteilen nach Kommas, Verarbeitung von Anführungszeichen, Escape-Zeichen) wird schnell umständlich und fehleranfällig. Bibliotheken lösen die folgenden Aufgaben:
- Korrekte Verarbeitung von Anführungszeichen und Escape-Zeichen.
- Unterstützung verschiedener Trennzeichen (Komma, Tabulator, Semikolon).
- Streaming-Lesen großer Dateien (ohne vollständiges Laden in den Speicher).
- Integration mit Codable für automatische Deserialisierung.
2. Bibliothek SwiftCSV
SwiftCSV ist eine leichte Bibliothek zum Lesen und Schreiben von CSV. Sie unterstützt Zeilen, Wörterbücher und verschachtelte Arrays. Installation über Swift Package Manager:
// Package.swiftdependencies: [ .package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.9.0")]Beispiel zum Lesen einer CSV aus einer Datei:
import SwiftCSV
guard let path = Bundle.main.path(forResource: "data", ofType: "csv") else { fatalError("CSV file not found")}let csv = try CSV(url: URL(fileURLWithPath: path))
// Zugriff auf Zeilen über Überschriftenfor row in csv.rows { let name = row["name"] ?? "" let age = row["age"] ?? "" print("\\(name) ist \\(age) Jahre alt")}
// Zugriff auf Spaltenlet allNames = csv.columns["name"] ?? []print(allNames) CSV schreiben: Die Bibliothek bietet keine integrierte Schreibmethode, aber Sie können manuell einen String erstellen:
func writeCSV(rows: [[String: String]], headers: [String]) -> String { var csvString = headers.joined(separator: ",") + "" for row in rows { let values = headers.map { row[$0] ?? "" } csvString += values.joined(separator: ",") + "" } return csvString}
let csvData = writeCSV(rows: data, headers: ["name", "age"])try csvData.write(to: url, atomically: true, encoding: .utf8)3. Bibliothek CodableCSV
CodableCSV ist eine leistungsstarke Bibliothek, die Codable, benutzerdefinierte Trennzeichen, Streaming-Lesen und anpassbare Kodierung unterstützt. Ideal für komplexe Projekte.
Installation:
// Package.swiftdependencies: [ .package(url: "https://github.com/dehesa/CodableCSV.git", from: "0.9.0")]Beispiel zum Lesen mit automatischer Deserialisierung in ein Modell:
import CodableCSV
struct Person: Codable { let name: String let age: Int let email: String?}
let data = try Data(contentsOf: url)let decoder = CSVDecoder { config in config.headerStrategy = .firstLine // erste Zeile sind Überschriften config.delimiter = .comma}let people = try decoder.decode([Person].self, from: data)
for person in people { print(person.name, person.age)}CSV schreiben mit CodableCSV:
let encoder = CSVEncoder { config in config.headerStrategy = .firstLine config.delimiter = .comma}let data = try encoder.encode(people, into: Data.self)try data.write(to: url, options: .atomic)4. Manuelles Parsing (ohne Bibliotheken)
Wenn das Projekt klein ist und Sie Abhängigkeiten vermeiden möchten, können Sie einen einfachen Parser implementieren. GraphQL auf Kotlin: Überblick über Bibliotheken und Tools für die Serverentwicklung Maschinelles Lernen mit Rust: Überblick über Bibliotheken für Data Science Rate limiting in Rust: Bibliotheken governor, leaky-bucket und Middleware für Webserver PDF-Generierung in Swift (iOS/macOS): Überblick über Tools und BeispieleAuch in der Bibliothek
CoreBluetooth für Swift: Vollständiges BLE-Guide mit Beispielen
Integration von Prometheus-Metriken in PHP: Bibliotheken und Beispiele
Caching in Java: Redis, Ehcache, Caffeine, Hazelcast – Überblick und Beispiele
Statsmodels: Statistische Analyse mit Python
mo für Go: Vollständige Anleitung mit Beispielen
Empfehlungen