Dart:
Praca z CSV
Jak to zrobić:
Aby obsługiwać pliki CSV w Dart, zazwyczaj przetwarzasz tekst ręcznie lub używasz bibliotek stron trzecich, aby uprościć zadanie. Tutaj przyjrzymy się obu podejściom.
Ręczne parsowanie CSV
Jeśli twoje potrzeby są proste, możesz zdecydować się na ręczne parsowanie łańcucha CSV. Można to osiągnąć za pomocą podstawowych funkcji manipulacji łańcuchami w Dart:
void main() {
// Przykładowe dane CSV
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Dzielenie danych CSV na linie
List<String> lines = csvData.split('\n');
// Parsowanie każdej linii
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);
}
// Wyświetlanie przeanalizowanych danych
print(data);
}
// Przykładowe wyjście:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Używanie biblioteki stron trzecich: csv
W bardziej złożonych scenariuszach lub aby uprościć kod, możesz użyć popularnej biblioteki stron trzecich, takiej jak csv
. Najpierw dodaj ją do swojego projektu, wpisując csv: ^5.0.0
(lub najnowszą wersję) w pliku pubspec.yaml
w sekcji dependencies
. Następnie użyj jej w następujący sposób:
import 'package:csv/csv.dart';
void main() {
String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
// Użyj CsvToListConverter do parsowania danych CSV
List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
// Pierwszy element listy zawiera nagłówki
List<String> headers = listData.first.map((item) => item.toString()).toList();
// Usunięcie wiersza z nagłówkami, zanim przejdziemy dalej
listData.removeAt(0);
// Konwersja na List<Map<String, dynamic>> dla bardziej uporządkowanego formatu
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();
// Wyświetlanie zmapowanych danych
print(mappedData);
}
// Przykładowe wyjście:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
Obie metody demonstrują, jak pracować z danymi CSV: pierwsza ręcznie, do celów edukacyjnych lub podczas pracy z bardzo prostymi strukturami CSV; druga, wykorzystująca potężną bibliotekę, która upraszcza parsowanie i może obsługiwać różne złożoności formatowania CSV.