🦋

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,
.....

さあ、次はScatter3Dで表示しよう

Flutter大学

Discussion