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
のような人気のあるサードパーティライブラリを使用することができます。まず、dependencies
の下にcsv: ^5.0.0
(または最新版)をpubspec.yaml
ファイルに含めることでプロジェクトに追加します。次に、以下のように使用します:
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フォーマットのさまざまな複雑さを扱うことができる強力なライブラリを利用する方法です。