🦋
filePickerでCSVを読んでMapにparseする
filePickerを起動→ファイルを選択→Dartに変換
前回、テスト用のFileをSimulator、Emulatorに導入したので
それを読んでいきます。
Future<void> importCSV() async {
// Pick a CSV file using file_picker
FilePickerResult? result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: ['csv'],
);
if (result != null && result.files.single.path != null) {
final File file = File(result.files.single.path!);
final String csvString = await file.readAsString();
// Parse CSV data using csv package
List<List<dynamic>> rows =
const CsvToListConverter().convert(csvString);
// Assume the first row contains the header and skip it
List<Map<String, dynamic>> parsedData = [];
for (var i = 1; i < rows.length; i++) {
var row = rows[i];
parsedData.add({
'id': row[0].toString(),
'x': (row[1] as num).toDouble(),
'y': (row[2] as num).toDouble(),
'z': (row[3] as num).toDouble(),
'color': row[4].toString(),
'size': row[5] is int ? row[5] : (row[5] as num).toInt(),
});
}
setState(() {
_parsedData = parsedData;
});
} else {
// Handle cancellation or error in file picking
FailureSnackBar.show('CSVファイルの選択がキャンセルされました。');
}
}
読んでいるのはこんなデータ
Id,X,Y,Z,Color,Size,
1,100,100,100,Blue,10,
2,95,80,75,Blue,20,
3,80,60,90,Blue,30,
4,45,70,50,Blue,10,
5,50,50,50,Blue,10,
.....
Discussion