Dart:
操作CSV
如何操作:
在 Dart 中处理 CSV 文件,你通常要么手动处理文本,要么使用第三方库来简化任务。这里,我们将看看两种方法。
手动解析 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> 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);
}
// 输出解析的数据
print(data);
}
// 示例输出:
// [{Name: John Doe, Age: 30, Email: john@example.com}, {Name: Jane Smith, Age: 25, Email: jane@example.com}]
使用第三方库:csv
对于更复杂的情况或为了简化代码,你可以使用像 csv
这样的流行第三方库。首先,在你的 pubspec.yaml
文件的 dependencies
下添加 csv: ^5.0.0
(或最新版本)以将其加入项目。然后按以下方式使用它:
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> headers = 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 < headers.length; i++) {
map[headers[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 格式的各种复杂性。