Dart:
Trabajando con CSV
Cómo hacerlo:
Para manejar archivos CSV en Dart, generalmente se procesa el texto manualmente o se utilizan bibliotecas de terceros para simplificar la tarea. Aquí, veremos ambos enfoques.
Analizando CSV Manualmente
Si tus necesidades son simples, podrías optar por analizar manualmente una cadena CSV. Esto se puede lograr usando las funciones de manipulación de cadenas del núcleo de Dart:
void main() {
// Datos CSV de muestra
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Dividiendo los datos CSV en líneas
List<String> lines = csvData.split('\n');
// Analizando cada línea
List<Map<String, String>> data = [];
List<String> headers = lines.first.split(',');
for (var i = 1; i < lines.length; i++) {
List<String> row = lines[i].split(',');
Map<String, String> record = {};
for (var j = 0; j < headers.length; j++) {
record[headers[j]] = row[j];
}
data.add(record);
}
// Salida de los datos analizados
print(data);
}
// Salida de muestra:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Usando una Biblioteca de Terceros: csv
Para escenarios más complejos o para simplificar tu código, puedes usar una biblioteca de terceros popular como csv
. Primero, agrégala a tu proyecto incluyendo csv: ^5.0.0
(o la última versión) en tu archivo pubspec.yaml
bajo dependencies
. Luego úsala de la siguiente manera:
import 'package:csv/csv.dart';
void main() {
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Usa CsvToListConverter para analizar los datos CSV
List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
// El primer elemento de la lista contiene los encabezados
List<String> headers = listData.first.map((item) => item.toString()).toList();
// Eliminando la fila de encabezado antes de procesar más
listData.removeAt(0);
// Convertir a List<Map<String, dynamic>> para un formato más estructurado
List<Map<String, dynamic>> mappedData = listData.map((list) {
Map<String, dynamic> map = {};
for (int i = 0; i < headers.length; i++) {
map[headers[i]] = list[i];
}
return map;
}).toList();
// Salida de los datos mapeados
print(mappedData);
}
// Salida de muestra:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Ambos métodos demuestran cómo trabajar con datos CSV: el primero manualmente, para fines de aprendizaje o cuando se trata de estructuras CSV muy simples; el segundo, aprovechando una biblioteca potente que simplifica el análisis y puede manejar varias complejidades del formato CSV.