Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 23 additions & 14 deletions CsvExport.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,27 +118,36 @@ string MakeValueCsvFriendly(object value)
}

/// <summary>
/// Output all rows as a CSV returning a string
/// Outputs all rows as a CSV, returning one string at a time
/// </summary>
public string Export()
private IEnumerable<string> ExportToLines()
{
StringBuilder sb = new StringBuilder();

sb.AppendLine("sep=,");
yield return "sep=,";

// The header
sb.Append(string.Join(",", fields.ToArray()));
sb.AppendLine();
yield return string.Join(",", fields);

// The rows
foreach (Dictionary<string, object> row in rows)
{
fields.Where(f => !row.ContainsKey(f)).ToList().ForEach(k =>
{
row[k] = null;
});
sb.Append(string.Join(",", fields.Select(field => MakeValueCsvFriendly(row[field])).ToArray()));
sb.AppendLine();
foreach (string k in fields.Where(f => !row.ContainsKey(f)))
{
row[k] = null;
}
yield return string.Join(",", fields.Select(field => MakeValueCsvFriendly(row[field])));
}
}

/// <summary>
/// Output all rows as a CSV returning a string
/// </summary>
public string Export()
{
StringBuilder sb = new StringBuilder();

foreach (string line in ExportToLines())
{
sb.AppendLine(line);
}

return sb.ToString();
Expand All @@ -149,7 +158,7 @@ public string Export()
/// </summary>
public void ExportToFile(string path)
{
File.WriteAllText(path, Export());
File.WriteAllLines(path, ExportToLines(), Encoding.UTF8);
}

/// <summary>
Expand Down