Swift:
Trabajando con CSV
Cómo hacerlo:
En Swift, no hay soporte nativo para analizar archivos CSV directamente, pero puedes manejar datos CSV utilizando los métodos de String
para dividir los contenidos, o aprovechando bibliotecas de terceros como SwiftCSV para un enfoque más simplificado. Aquí están ambos métodos:
Análisis Manual sin Bibliotecas Externas
// Considera una simple cadena CSV
let csvString = """
name,age,city
John Doe,29,New York
Jane Smith,34,Los Ángeles
"""
// Divide la cadena CSV en líneas
let rows = csvString.components(separatedBy: "\n")
// Extrae las claves de la primera fila
let keys = rows.first?.components(separatedBy: ",")
// Itera sobre las filas empezando desde la segunda
var result: [[String: String]] = []
for row in rows.dropFirst() {
let values = row.components(separatedBy: ",")
let dict = Dictionary(uniqueKeysWithValues: zip(keys!, values))
result.append(dict)
}
// Salida de Ejemplo
print(result)
// Imprime: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Ángeles", "age": "34", "name": "Jane Smith"}]
Este enfoque es directo pero carece de robustez, especialmente con archivos CSV que contienen casos especiales como comas en valores, saltos de línea dentro de campos, etc.
Usando la Biblioteca SwiftCSV
Primero, agrega SwiftCSV a tu proyecto incluyéndolo en tus dependencias de Package.swift
:
.package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.5.6")
Luego, impórtalo y úsalo de la siguiente manera:
import SwiftCSV
// Asume que `csvString` está definido como arriba
// Crea un objeto CSV
if let csv = try? CSV(string: csvString) {
// Accede a las filas como diccionarios
let rows = csv.namedRows
// Salida de Ejemplo
print(rows)
// Imprime: [{"city": "New York", "age": "29", "name": "John Doe"}, {"city": "Los Ángeles", "age": "34", "name": "Jane Smith"}]
}
SwiftCSV simplifica el análisis al lidiar automáticamente con matices como comas encapsuladas, saltos de línea en campos y codificación de caracteres. Sin embargo, recuerda manejar posibles errores en aplicaciones del mundo real, especialmente al tratar con fuentes de datos externas.