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.