parseCsvToMapList static method

Future<List<Map<String, dynamic>>> parseCsvToMapList({
  1. required String content,
  2. int keyRowIndex = 0,
  3. String eol = '\n',
  4. FieldValueParser? fieldValueParser,
})

将csv文件转换为List

注意:部分csv文件中,部分字段分割符、转义符、行分隔符默认值与csv不一致, 在解析异常时,可能需要手动指定

content csv文件内容 keyRowIndex 字段列表所在行 eol 数据中Row分隔符定义

Implementation

static Future<List<Map<String, dynamic>>> parseCsvToMapList({
  required String content,
  int keyRowIndex = 0,
  String eol = '\n',
  FieldValueParser? fieldValueParser,
}) async {
  final List<Map<String, dynamic>> results = [];
  final List<List<dynamic>> parsedData = const CsvToListConverter().convert(
    content,
    eol: eol,
  );
  final List<String> fieldList = parsedData[keyRowIndex]
      .map(
        (e) => TextUtil.trim(e.toString()),
      )
      .toList();
  final contentList = parsedData.sublist(keyRowIndex + 1);
  for (final row in contentList) {
    final Map<String, dynamic> map = {};
    for (int i = 0; i < fieldList.length; i++) {
      final key = fieldList[i];
      final value = row.length > i ? row[i] : null;
      if (fieldValueParser != null) {
        map[key] = fieldValueParser(key, value);
      } else {
        map[key] = value;
      }
    }
    results.add(map);
  }
  return results;
}