Swift:
Praca z plikami CSV
Jak to zrobić:
W języku Swift nie ma natywnej obsługi bezpośredniego parsowania plików CSV, ale możesz obsługiwać dane CSV, używając metod String
, aby rozdzielić zawartość, lub korzystając z bibliotek stron trzecich, takich jak SwiftCSV, dla bardziej uproszczonego podejścia. Oto obie metody:
Ręczne parsowanie bez zewnętrznych bibliotek
// Rozważ prosty ciąg CSV
let csvString = """
name,age,city
John Doe,29,New York
Jane Smith,34,Los Angeles
"""
// Podziel ciąg CSV na linie
let rows = csvString.components(separatedBy: "\n")
// Wyodrębnij klucze z pierwszego wiersza
let keys = rows.first?.components(separatedBy: ",")
// Iteruj po wierszach, zaczynając od drugiego
var result: [[String: String]] = []
for row in rows.dropFirst() {
let values = row.components(separatedBy: ",")
let dict = Dictionary(uniqueKeysWithValues: zip(keys!, values))
result.append(dict)
}
// Przykładowe wyjście
print(result)
// Wyświetla: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Angeles", "age": "34", "name": "Jane Smith"}]
To podejście jest proste, ale niezbyt solidne, szczególnie w przypadku plików CSV zawierających specjalne przypadki, takie jak przecinki w wartościach, przerwy w liniach wewnątrz pól itp.
Korzystanie z biblioteki SwiftCSV
Najpierw dodaj SwiftCSV do swojego projektu, włączając ją do zależności swojego Package.swift
:
.package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.5.6")
Następnie zaimportuj ją i użyj w następujący sposób:
import SwiftCSV
// Zakładając, że `csvString` jest zdefiniowane jak wyżej
// Utwórz obiekt CSV
if let csv = try? CSV(string: csvString) {
// Dostęp do wierszy jako słowników
let rows = csv.namedRows
// Przykładowe wyjście
print(rows)
// Wyświetla: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Angeles", "age": "34", "name": "Jane Smith"}]
}
SwiftCSV upraszcza parsowanie, automatycznie radząc sobie z niuansami takimi jak ujęte przecinki, przerwy w linii w polach i kodowanie znaków. Jednak pamiętaj, aby obsługiwać możliwe błędy w aplikacjach świata rzeczywistego, zwłaszcza przy pracy z zewnętrznymi źródłami danych.