Dart:
Arbeta med CSV

Hur man gör:

För att hantera CSV-filer i Dart, brukar man antingen manuellt bearbeta texten eller använda tredjepartsbibliotek för att förenkla uppgiften. Här kommer vi att titta på båda metoder.

Manuell tolkning av CSV

Om dina behov är enkla, kan du välja att manuellt tolka en CSV-sträng. Detta kan uppnås med hjälp av Darts kärnsträngmanipuleringsfunktioner:

void main() {
  //Exempel på CSV-data
  String csvData = "Namn,Ålder,E-post\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // Delar upp CSV-datan i rader
  List<String> rader = csvData.split('\n');
  
  // Tolkar varje rad
  List<Map<String, String>> data = [];
  List<String> huvuden = rader.first.split(',');
  
  for (var i = 1; i < rader.length; i++) {
    List<String> rad = rader[i].split(',');
    Map<String, String> post = {};
    for (var j = 0; j < huvuden.length; j++) {
      post[huvuden[j]] = rad[j];
    }
    data.add(post);
  }
  
  // Skriver ut den tolkade datan
  print(data);
}

// Exempel på utdata:
// [{Namn: John Doe, Ålder: 30, E-post: john@example.com}, {Namn: Jane Smith, Ålder: 25, E-post: jane@example.com}]

Använda ett tredjepartsbibliotek: csv

För mer komplexa scenarier eller för att förenkla din kod, kan du använda ett populärt tredjepartsbibliotek som csv. Lägg först till det i ditt projekt genom att inkludera csv: ^5.0.0 (eller senaste versionen) i din pubspec.yaml-fil under dependencies. Använd det sedan enligt följande:

import 'package:csv/csv.dart';

void main() {
  String csvData = "Namn,Ålder,E-post\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // Använder CsvToListConverter för att tolka CSV-datan
  List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
  
  // Det första listobjektet innehåller huvuden
  List<String> huvuden = listData.first.map((item) => item.toString()).toList();
  
  // Tar bort rubrikraden innan vidare bearbetning
  listData.removeAt(0);
  
  // Konverterar till List<Map<String, dynamic>> för ett mer strukturerat format
  List<Map<String, dynamic>> mappadData = listData.map((lista) {
    Map<String, dynamic> karta = {};
    for (int i = 0; i < huvuden.length; i++) {
      karta[huvuden[i]] = lista[i];
    }
    return karta;
  }).toList();
  
  // Skriver ut den mappade datan
  print(mappadData);
}

// Exempel på utdata:
// [{Namn: John Doe, Ålder: 30, E-post: john@example.com}, {Namn: Jane Smith, Ålder: 25, E-post: jane@example.com}]

Båda metoderna demonstrerar hur man jobbar med CSV-data: den första manuellt, för lärande syften eller när man hanterar mycket enkla CSV-strukturer; den andra, genom att utnyttja ett kraftfullt bibliotek som förenklar tolkningen och kan hantera olika komplexiteter av CSV-formatering.