Swift:
Робота з CSV

Як:

У Swift немає вбудованої підтримки для безпосереднього аналізу файлів CSV, але ви можете обробляти дані CSV, використовуючи методи String для розбиття вмісту, або використовуючи сторонні бібліотеки, такі як SwiftCSV, для більш зручного підходу. Ось обидва методи:

Ручний аналіз без зовнішніх бібліотек

// Розглянемо простий рядок CSV
let csvString = """
name,age,city
John Doe,29,New York
Jane Smith,34,Los Angeles
"""

// Розділімо рядок CSV на рядки
let rows = csvString.components(separatedBy: "\n")

// Витягнемо ключі з першого рядка
let keys = rows.first?.components(separatedBy: ",")

// Проходимося по рядках, починаючи з другого
var result: [[String: String]] = []
for row in rows.dropFirst() {
    let values = row.components(separatedBy: ",")
    let dict = Dictionary(uniqueKeysWithValues: zip(keys!, values))
    result.append(dict)
}

// Приклад виводу
print(result)
// Виводить: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Angeles", "age": "34", "name": "Jane Smith"}]

Цей підхід простий, але не дуже надійний, особливо у випадках із спеціальними умовами, такими як коми у значеннях, розриви рядків у полях тощо.

Використання бібліотеки SwiftCSV

Спочатку додайте SwiftCSV до вашого проєкту, включивши її в залежності вашого Package.swift:

.package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.5.6")

Потім імпортуйте та використовуйте її наступним чином:

import SwiftCSV

// Припустимо, `csvString` визначено як вище

// Створимо об'єкт CSV
if let csv = try? CSV(string: csvString) {
    // Доступ до рядків як до словників
    let rows = csv.namedRows
    
    // Приклад виводу
    print(rows)
    // Виводить: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Angeles", "age": "34", "name": "Jane Smith"}]
}

SwiftCSV спрощує аналіз, автоматично обробляючи нюанси, такі як коми всередині тексту, розриви рядків у полях та кодування символів. Однак, пам’ятайте про необхідність обробки можливих помилок у реальних додатках, особливо при роботі з зовнішніми джерелами даних.