Dart:
Работа с CSV

Как это сделать:

Чтобы обрабатывать файлы CSV в Dart, обычно либо вручную обрабатывают текст, либо используют сторонние библиотеки для упрощения задачи. Здесь мы рассмотрим оба подхода.

Ручной разбор CSV

Если ваши требования просты, вы можете выбрать ручной разбор строки CSV. Это можно сделать с помощью основных функций манипулирования строками в Dart:

void main() {
  // Пример данных CSV
  String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // Разбиение данных CSV на строки
  List<String> lines = csvData.split('\n');
  
  // Разбор каждой строки
  List<Map<String, String>> data = [];
  List<String> заголовки = 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 < заголовки.length; j++) {
      record[заголовки[j]] = row[j];
    }
    data.add(record);
  }
  
  // Вывод разобранных данных
  print(data);
}

// Пример вывода:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]

Использование сторонней библиотеки: csv

Для более сложных сценариев или для упрощения вашего кода вы можете использовать популярную стороннюю библиотеку, например csv. Сначала добавьте ее в свой проект, включив csv: ^5.0.0 (или последнюю версию) в файл pubspec.yaml в разделе dependencies. Затем используйте ее следующим образом:

import 'package:csv/csv.dart';

void main() {
  String csvData = "Name,Age,Email\nJohn Doe,30,[email protected]\nJane Smith,25,[email protected]";
  
  // Использование CsvToListConverter для разбора данных CSV
  List<List<dynamic>> listData = const CsvToListConverter().convert(csvData);
  
  // Первый элемент списка содержит заголовки
  List<String> заголовки = listData.first.map((item) => item.toString()).toList();
  
  // Удаление строки с заголовками перед дальнейшей обработкой
  listData.removeAt(0);
  
  // Преобразование в List<Map<String, dynamic>> для более структурированного формата
  List<Map<String, dynamic>> mappedData = listData.map((list) {
    Map<String, dynamic> map = {};
    for (int i = 0; i < заголовки.length; i++) {
      map[заголовки[i]] = list[i];
    }
    return map;
  }).toList();
  
  // Вывод преобразованных данных
  print(mappedData);
}

// Пример вывода:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]

Оба метода демонстрируют, как работать с данными CSV: первый вручную, для учебных целей или при работе с очень простыми структурами CSV; второй, с использованием мощной библиотеки, которая упрощает разбор и может обрабатывать различные сложности форматирования CSV.