csvToMap method

Map<int, List<String>> csvToMap(
  1. String input
)

Implementation

Map<int, List<String>> csvToMap(String input) {
  final regex = RegExp(r',(?=(?:[^"]*"[^"]*")*[^"]*$)');
  final lines = input.split('\n').where((line) => line.isNotEmpty).toList();
  final res = <int, List<String>>{};

  for (var i = 0; i < lines.length; i++) {
    final line = lines[i];
    final parts = line.split(regex).map((part) {
      var trimmed = part.trim();
      if (trimmed.length >= 2 &&
          trimmed.startsWith('"') &&
          trimmed.endsWith('"')) {
        trimmed = trimmed.substring(1, trimmed.length - 1);
        return trimmed.replaceAll('""', '"');
      }
      return trimmed;
    }).toList();
    res[i] = parts;
  }
  return res;
}