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;
}