Dart:
Lavorare con CSV
Come fare:
Per gestire file CSV in Dart, in genere si elabora manualmente il testo o si utilizzano librerie di terze parti per semplificare il compito. Qui, esamineremo entrambi gli approcci.
Analisi Manuale di CSV
Se le tue esigenze sono semplici, potresti scegliere di analizzare manualmente una stringa CSV. Questo può essere realizzato utilizzando le funzioni di manipolazione delle stringhe di base di Dart:
void main() {
// Dati CSV di esempio
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Divisione dei dati CSV in righe
List<String> lines = csvData.split('\n');
// Analisi di ogni riga
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);
}
// Output dei dati analizzati
print(data);
}
// Output di esempio:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Utilizzo di una Libreria di Terze Parti: csv
Per scenari più complessi o per semplificare il codice, puoi utilizzare una libreria di terze parti popolare come csv
. Prima, aggiungila al tuo progetto includendo csv: ^5.0.0
(o l’ultima versione) nel tuo file pubspec.yaml
sotto dependencies
. Quindi usala come segue:
import 'package:csv/csv.dart';
void main() {
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Utilizza il CsvToListConverter per analizzare i dati CSV
List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
// Il primo elemento della lista contiene gli header
List<String> headers = listData.first.map((item) => item.toString()).toList();
// Rimozione della riga degli header prima di procedere ulteriormente
listData.removeAt(0);
// Conversione in List<Map<String, dynamic>> per un formato più strutturato
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();
// Output dei dati mappati
print(mappedData);
}
// Output di esempio:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Entrambi i metodi dimostrano come lavorare con i dati CSV: il primo manualmente, a scopo didattico o quando si ha a che fare con strutture CSV molto semplici; il secondo, sfruttando una potente libreria che semplifica l’analisi e può gestire varie complessità della formattazione CSV.