generateCSV method

String generateCSV({
  1. String separator = ',',
  2. List<String>? fieldsNames,
  3. Object valueNormalizer(
    1. Object? e
    )?,
  4. bool commaAsDecimalSeparator = false,
  5. int decimalPrecision = 4,
})

Generates a CSV document.

Implementation

String generateCSV(
    {String separator = ',',
    List<String>? fieldsNames,
    Object Function(Object? e)? valueNormalizer,
    bool commaAsDecimalSeparator = false,
    int decimalPrecision = 4}) {
  if (isEmpty) return '';

  var csv = StringBuffer();

  List<K>? keys;

  if (fieldsNames == null) {
    keys = first.keys.toList();
  }

  {
    var head = (fieldsNames ?? keys!)
        .toStringsList()
        .map(_normalizeLine)
        .join(separator);
    csv.write(head);
    csv.write('\n');
  }

  if (valueNormalizer != null) {
    for (var e in this) {
      var values = keys != null
          ? e.getValuesInKeysOrder(keys)
          : e.getValuesInStringKeysOrder(fieldsNames!);

      var line = values
          .map((e) => _normalizeLine(valueNormalizer(e).toString()))
          .join(separator);
      csv.write(line);
      csv.write('\n');
    }
  } else {
    for (var e in this) {
      var values = keys != null
          ? e.getValuesInKeysOrder(keys)
          : e.getValuesInStringKeysOrder(fieldsNames!);

      var line = values.map((e) {
        var s = normalizeCSVValue(e,
            separator: separator,
            commaAsDecimalSeparator: commaAsDecimalSeparator,
            decimalPrecision: decimalPrecision);
        return _normalizeLine(s);
      }).join(separator);
      csv.write(line);
      csv.write('\n');
    }
  }

  return csv.toString();
}