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)
data.forEach((map)
{
i++;
List<String> row = [];
columns.forEach((column) {
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;
}