/// <summary> /// Appends the rows to the builder. /// </summary> /// <param name="sb">The string builder.</param> /// <param name="definition">The definition.</param> /// <returns>The mutated string builder.</returns> private static StringBuilder AppendRows(this StringBuilder sb, CsvDefinition definition) { foreach (var row in definition.Rows) { sb.AppendRow(definition, row); } return(sb); }
/// <summary> /// Appends the headers to the builder. /// </summary> /// <param name="sb">The string builder.</param> /// <param name="definition">The definition.</param> /// <returns>The mutated string builder.</returns> private static StringBuilder AppendHeaders(this StringBuilder sb, CsvDefinition definition) { foreach (var header in definition.Headers) { sb.Append(header) .Append(DELIM); } return(sb.AppendLineEnd()); }
private static StringBuilder AppendRow(this StringBuilder sb, CsvDefinition definition, CsvRow row) { foreach (var header in definition.Headers) { var cell = row.SingleOrDefault(c => c.Header == header)?.Value ?? string.Empty; sb.Append(Encode(cell)).Append(DELIM); } return(sb.AppendLineEnd()); }
/// <summary> /// Converts the file definition to a string. /// </summary> /// <returns></returns> public static string GenerateString(this CsvDefinition definition) { if (!definition.ThrowIfNull(nameof(definition)).Validate()) { throw new InvalidOperationException("Unable to generate CSV output as the definition provided is currently invalid."); } return(new StringBuilder() .AppendHeaders(definition) .AppendRows(definition) .ToString()); }
/// <summary> /// Exports the file definition to a byte array. /// </summary> /// <param name="definition">The definition.</param> /// <returns>A byte array representing the file, ideal for downloading.</returns> public static byte[] GenerateBytes(this CsvDefinition definition) => Encoding.UTF8.GetBytes(GenerateString(definition));
/// <summary> /// Exports the file definition to a file. /// </summary> /// <param name="definition">The definition.</param> /// <param name="path">The path of the target file.</param> public static void GenerateFile(this CsvDefinition definition, string path) => System.IO.File.WriteAllText(path.ThrowIfNullOrEmpty(nameof(path)), GenerateString(definition));