Trabalhando com CSV em Swift (iOS/macOS): biblioteca SwiftCSV e fundamentos de parsing
CSV (Comma-Separated Values) — um dos formatos mais populares para armazenar dados tabulares. No ecossistema Apple (iOS, macOS), trabalhar com arquivos CSV é frequentemente necessário para importar dados de fontes externas, exportar relatórios ou carregar configurações. Neste artigo, abordaremos a biblioteca SwiftCSV — uma solução leve e conveniente para parsing de CSV em Swift, além de exemplos básicos de trabalho com este formato sem dependências externas.
O que é SwiftCSV?
SwiftCSV é uma biblioteca open-source para Swift que permite ler e processar arquivos CSV facilmente. Ela suporta tanto parsing de strings quanto trabalho com arquivos, detecta automaticamente delimitadores (vírgula, tabulação, ponto e vírgula) e fornece uma API conveniente para acessar linhas, colunas e células individuais.
Principais funcionalidades:
- Parsing de CSV a partir de string, Data ou URL (local ou remota).
- Suporte a cabeçalhos de colunas (primeira linha como chaves).
- Manipulação de aspas aninhadas e caracteres escapados.
- Possibilidade de escolher o delimitador (vírgula, tabulação, personalizado).
- Mínimo de dependências (Swift puro).
Instalação do SwiftCSV
Adicione a biblioteca via Swift Package Manager (SPM):
- No Xcode, selecione
File → Add Packages.... - Cole a URL do repositório:
https://github.com/swiftcsv/SwiftCSV.git. - Escolha a versão (recomenda-se a última estável).
- Adicione o pacote ao seu target.
Ou adicione no Package.swift:
dependencies: [ .package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.9.0")]Exemplo básico: leitura de CSV a partir de string
Suponha que temos uma string CSV com dados de usuários:
let csvString = """name,age,cityAlice,30,New YorkBob,25,Los AngelesCharlie,35,Chicago"""Fazemos o parsing com SwiftCSV:
import SwiftCSV
do { let csv = try CSV(string: csvString) // Acesso às linhas como dicionários (chaves são os cabeçalhos) for row in csv.rows { if let name = row["name"], let age = row["age"], let city = row["city"] { print("\\(name) (\\(age) anos) mora em \\(city)") } }} catch { print("Erro de parsing: \\(error)")}Saída:
Alice (30 anos) mora em New YorkBob (25 anos) mora em Los AngelesCharlie (35 anos) mora em ChicagoLeitura de CSV a partir de arquivo (iOS/macOS)
Para carregar CSV de um arquivo local (por exemplo, na pasta Documents ou do bundle):
import SwiftCSV
// Caminho do arquivo (exemplo: em Documents)let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("data.csv")
do { let csv = try CSV(url: fileURL) // Acesso às colunas let names = csv.columns["name"] ?? [] print("Todos os nomes: \\(names)")} catch { print("Erro: \\(error)")}Para arquivo do bundle:
if let path = Bundle.main.path(forResource: "data", ofType: "csv") { let url = URL(fileURLWithPath: path) let csv = try CSV(url: url) // Manipulação dos dados}Delimitadores personalizados e configurações
Se seu CSV usa tabulação ou ponto e vírgula, especifique o delimitador explicitamente:
// TSV (Tab-Separated Values)let tsv = try CSV(string: "name\\tageAlice\\t30", delimiter: .tab)
// Delimitador — ponto e vírgulalet csvSemicolon = try CSV(string: "name;ageAlice;30", delimiter: Character(";"))Também é possível desabilitar o parsing de cabeçalhos (a primeira linha será tratada como linha comum):
let csvNoHead Também na biblioteca
Frameworks CLI para Go (Golang): uma visão geral completa das ferramentas para criar aplicações de console
Trabalhando com ZIP/arquivos em Swift (iOS/macOS): guia completo
Symfony/Mailer PHP: guia completo com exemplos práticos
Parsing de HTML em Node.js: visão geral das melhores bibliotecas e ferramentas