toCsv static method
Implementation
static Future<String> toCsv(Data data) async {
final buffer = StringBuffer();
String string = "";
int i = 0;
try {
// Build Header
List<String> header = [];
List<String> columns = [];
if (data.isNotEmpty) {
if (data.first is Map) {
(data.first as Map).forEach((key, value) {
columns.add(key);
String h = key.toString();
h.replaceAll('"', '""');
h = h.contains(',') ? '"$h"' : h;
header.add(h);
});
}
}
// Output Header
buffer.write('${header.join(", ")}\n');
// Output Data
if (columns.isNotEmpty) {
for (var map in data) {
i++;
List<String> row = [];
for (var column in columns) {
String value =
map.containsKey(column) ? map[column].toString() : '';
value.replaceAll('"', '""');
value = value.contains(',') ? '"$value"' : value;
row.add(value);
}
buffer.write('${row.join(", ")}\n');
}
}
// eof
string = buffer.toString();
string = string.replaceFirst('\n', '\r\n', string.lastIndexOf('\n'));
} catch (e) {
Log().debug('Error - Creating CSV column[$i]');
Log().exception(e);
}
return string;
}