Dart:
Trabalhando com CSV
Como Fazer:
Para manipular arquivos CSV em Dart, você geralmente processa o texto manualmente ou usa bibliotecas de terceiros para simplificar a tarefa. Aqui, vamos olhar para ambas as abordagens.
Analisando CSV Manualmente
Se suas necessidades são simples, você pode optar por analisar uma string CSV manualmente. Isso pode ser alcançado usando as funções de manipulação de string do próprio Dart:
void main() {
// Dados CSV de exemplo
String csvData = "Nome,Idade,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Dividindo os dados CSV em linhas
List<String> linhas = csvData.split('\n');
// Analisando cada linha
List<Map<String, String>> dados = [];
List<String> cabecalhos = linhas.first.split(',');
for (var i = 1; i < linhas.length; i++) {
List<String> linha = linhas[i].split(',');
Map<String, String> registro = {};
for (var j = 0; j < cabecalhos.length; j++) {
registro[cabecalhos[j]] = linha[j];
}
dados.add(registro);
}
// Exibindo os dados analisados
print(dados);
}
// Saída de exemplo:
// [{Nome: John Doe, Idade: 30, Email: john@example.com}, {Nome: Jane Smith, Idade: 25, Email: jane@example.com}]
Usando uma Biblioteca de Terceiros: csv
Para cenários mais complexos ou para simplificar seu código, você pode usar uma biblioteca de terceiros popular como csv
. Primeiro, adicione-a ao seu projeto incluindo csv: ^5.0.0
(ou a versão mais recente) no seu arquivo pubspec.yaml
sob dependencies
. Em seguida, use-a da seguinte maneira:
import 'package:csv/csv.dart';
void main() {
String csvData = "Nome,Idade,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Use o CsvToListConverter para analisar os dados CSV
List<List<dynamic>> dadosLista = const CsvToListConverter().convert(csvData);
// O primeiro item da lista contém os cabeçalhos
List<String> cabecalhos = dadosLista.first.map((item) => item.toString()).toList();
// Removendo a linha do cabeçalho antes de processar mais
dadosLista.removeAt(0);
// Converter para List<Map<String, dynamic>> para um formato mais estruturado
List<Map<String, dynamic>> dadosMapeados = dadosLista.map((lista) {
Map<String, dynamic> mapa = {};
for (int i = 0; i < cabecalhos.length; i++) {
mapa[cabecalhos[i]] = lista[i];
}
return mapa;
}).toList();
// Exibindo os dados mapeados
print(dadosMapeados);
}
// Saída de exemplo:
// [{Nome: John Doe, Idade: 30, Email: john@example.com}, {Nome: Jane Smith, Idade: 25, Email: jane@example.com}]
Ambos os métodos demonstram como trabalhar com dados CSV: o primeiro manualmente, para fins de aprendizado ou quando lidando com estruturas CSV muito simples; o segundo, aproveitando uma biblioteca poderosa que simplifica a análise e pode lidar com várias complexidades do formato CSV.