using System.Text; namespace LehrerApp.Desktop.Services; /// /// Erzeugt semikolongetrennte CSV-Daten für die deutsche Excel-Umgebung und maskiert Felder /// nach RFC-4180-Regeln. Das Trennzeichen bleibt bewusst konfigurierbar für weitere Exportformate. /// public sealed class CsvBuilder(char separator = ';') { private readonly StringBuilder _content = new(); public CsvBuilder AddRow(params object?[] values) { for (var index = 0; index < values.Length; index++) { if (index > 0) _content.Append(separator); AppendEscaped(values[index]?.ToString() ?? ""); } _content.AppendLine(); return this; } public CsvBuilder AddBlankRow() { _content.AppendLine(); return this; } public override string ToString() => _content.ToString(); private void AppendEscaped(string value) { if (!value.Contains(separator) && !value.Contains('"') && !value.Contains('\r') && !value.Contains('\n')) { _content.Append(value); return; } _content.Append('"'); _content.Append(value.Replace("\"", "\"\"", StringComparison.Ordinal)); _content.Append('"'); } }