Arbeiten mit CSV in Swift (iOS/macOS) — Bibliotheken und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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.

Empfehlungen