Dart:
Arbeiten mit CSV
Wie geht das:
Um CSV-Dateien in Dart zu handhaben, verarbeitet man den Text entweder manuell oder verwendet Drittanbieterbibliotheken, um die Aufgabe zu vereinfachen. Hier sehen wir uns beide Ansätze an.
Manuelles Parsen von CSV
Wenn Ihre Anforderungen einfach sind, könnten Sie sich dafür entscheiden, einen CSV-String manuell zu parsen. Dies kann mit den Kern-String-Manipulationsfunktionen von Dart erreicht werden:
void main() {
// Beispiel CSV-Daten
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Aufteilen der CSV-Daten in Zeilen
List<String> lines = csvData.split('\n');
// Parsen jeder Zeile
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);
}
// Ausgabe der geparsten Daten
print(data);
}
// Beispiel-Ausgabe:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Verwendung einer Drittanbieterbibliothek: csv
Für komplexere Szenarien oder um Ihren Code zu vereinfachen, können Sie eine beliebte Drittanbieterbibliothek wie csv
verwenden. Fügen Sie sie zuerst Ihrem Projekt hinzu, indem Sie csv: ^5.0.0
(oder die neueste Version) in Ihrer pubspec.yaml
-Datei unter dependencies
einfügen. Verwenden Sie es dann wie folgt:
import 'package:csv/csv.dart';
void main() {
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Verwendung des CsvToListConverter zum Parsen der CSV-Daten
List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
// Das erste Listenelement enthält die Kopfzeilen
List<String> headers = listData.first.map((item) => item.toString()).toList();
// Entfernen der Kopfzeile vor der weiteren Verarbeitung
listData.removeAt(0);
// Umwandlung in List<Map<String, dynamic>> für ein strukturierteres Format
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();
// Ausgabe der zugeordneten Daten
print(mappedData);
}
// Beispiel-Ausgabe:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Beide Methoden demonstrieren, wie man mit CSV-Daten arbeitet: die erste manuell, zu Lernzwecken oder wenn man es mit sehr einfachen CSV-Strukturen zu tun hat; die zweite, indem man eine leistungsfähige Bibliothek nutzt, die das Parsen vereinfacht und verschiedene Komplexitäten der CSV-Formatierung handhaben kann.