Dart:
Arbeide med CSV

Hvordan:

For å håndtere CSV-filer i Dart, behandler du vanligvis teksten manuelt eller bruker tredjepartsbiblioteker for å forenkle oppgaven. Her vil vi se på begge tilnærminger.

Manuell Analyse av CSV

Hvis dine behov er enkle, kan du velge å manuelt analysere en CSV-streng. Dette kan oppnås ved å bruke Darts kjernefunksjoner for strengmanipulering:

void main() {
  // Eksempel på CSV-data
  String csvData = "Navn,Alder,Epost\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // Splitte CSV-dataene inn i linjer
  List<String> linjer = csvData.split('\n');
  
  // Analysere hver linje
  List<Map<String, String>> data = [];
  List<String> overskrifter = linjer.first.split(',');
  
  for (var i = 1; i < linjer.length; i++) {
    List<String> rad = linjer[i].split(',');
    Map<String, String> post = {};
    for (var j = 0; j < overskrifter.length; j++) {
      post[overskrifter[j]] = rad[j];
    }
    data.add(post);
  }
  
  // Vise den analyserte dataen
  print(data);
}

// Eksempel på utskrift:
// [{Navn: John Doe, Alder: 30, Epost: john@example.com}, {Navn: Jane Smith, Alder: 25, Epost: jane@example.com}]

Bruke et Tredjepartsbibliotek: csv

For mer komplekse scenarioer eller for å forenkle koden din, kan du bruke et populært tredjepartsbibliotek som csv. Først, legg det til i prosjektet ditt ved å inkludere csv: ^5.0.0 (eller den nyeste versjonen) i din pubspec.yaml-fil under dependencies. Deretter bruker du det som følger:

import 'package:csv/csv.dart';

void main() {
  String csvData = "Navn,Alder,Epost\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // Bruk CsvToListConverter for å analysere CSV-dataene
  List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
  
  // Det første liste-elementet inneholder overskrifter
  List<String> overskrifter = listData.first.map((item) => item.toString()).toList();
  
  // Fjerne overskriftrad før videre bearbeiding
  listData.removeAt(0);
  
  // Konverter til List<Map<String, dynamic>> for et mer strukturert format
  List<Map<String, dynamic>> kartlagteData = listData.map((liste) {
    Map<String, dynamic> kart = {};
    for (int i = 0; i < overskrifter.length; i++) {
      kart[overskrifter[i]] = liste[i];
    }
    return kart;
  }).toList();
  
  // Vise de kartlagte dataene
  print(kartlagteData);
}

// Eksempel på utskrift:
// [{Navn: John Doe, Alder: 30, Epost: john@example.com}, {Navn: Jane Smith, Alder: 25, Epost: jane@example.com}]

Begge metodene demonstrerer hvordan man jobber med CSV-data: den første manuelt, for læreformål eller når man har med svært enkle CSV-strukturer å gjøre; den andre, ved å bruke et kraftig bibliotek som forenkler parsingen og kan håndtere ulike kompleksiteter av CSV-formatet.