Flutter将CSV转换为List<List<dynamic>> 按二维索引访问字段问题咨询
解决方案
问题核心是csv包的CsvToListConverter默认使用英文逗号,作为字段分隔符,而你的CSV文件采用分号;作为分隔符,因此不会自动拆分每行的字段,导致整行内容被识别为单个元素。
直接修改openFile方法里的转换器配置即可,修改后的代码如下:
void openFile(filePath) async { File itemsFile = File(filePath); print('CSV to List'); final input = itemsFile.openRead(); // 新增fieldDelimiter参数指定分隔符为分号 final fields = await input .transform(utf8.decoder) .transform(const CsvToListConverter(fieldDelimiter: ';')) .toList(); print(fields); for(var i = 0; i < fields.length; i++){ print(fields[i][0]); // 输出对应行的第一个字段,如第一行输出 item 1 print(fields[i][1]); // 输出对应行的第二个字段,如第一行输出 1200 print(fields[i][2]); // 输出对应行的第三个字段,如第一行输出 1300 } }
额外说明
- 如果你的CSV存在其他特殊配置,还可以调整
CsvToListConverter的其他参数,比如textDelimiter指定文本包裹符、eol指定换行符、shouldParseNumbers设置是否自动将数字字符串转为int/double类型。 - 修改后输出的结构就会是
[["item 1", 1200, 1300], ["item 2", 1200, 1300]],完全支持通过二维数组索引直接访问对应字段。
内容的提问来源于stack exchange,提问作者Mohammad Alamoudi
相关产品推荐
相关产品推荐

