using System.Collections.Generic; using System.Linq; using System.Text; namespace Logof_Client; public class CsvBuilder { private readonly string Header; private readonly List Instances; private readonly KasAddressList KasAddressList; private readonly char Separator; public CsvBuilder(string header, List instances, char separator = ',') { Header = header; Instances = instances; Separator = separator; } public CsvBuilder(string header, KasAddressList instances, char separator = ',') { Header = header; KasAddressList = instances; Separator = separator; } public string? BuildKas() { var result = new StringBuilder(); result.AppendLine(Header); foreach (var l in KasAddressList.KasPersons) result.AppendLine(string.Join(Separator, new[] { EscapeCsvField(l.refsid.ToString()), EscapeCsvField(l.anrede), EscapeCsvField(l.titel), EscapeCsvField(l.vorname), EscapeCsvField(l.adel), EscapeCsvField(l.name), EscapeCsvField(l.namezus), EscapeCsvField(l.anredzus), EscapeCsvField(l.strasse), EscapeCsvField(l.strasse2), EscapeCsvField(l.plz), EscapeCsvField(l.ort), EscapeCsvField(l.land), EscapeCsvField(l.pplz), EscapeCsvField(l.postfach), EscapeCsvField(l.name1), EscapeCsvField(l.name2), EscapeCsvField(l.name3), EscapeCsvField(l.name4), EscapeCsvField(l.name5), EscapeCsvField(l.funktion), EscapeCsvField(l.funktion2), EscapeCsvField(l.abteilung), EscapeCsvField(l.funktionad) })); // weitere Cases return result.ToString(); } private string EscapeCsvField(string? value) { var field = value ?? string.Empty; var mustQuote = field.Contains(Separator) || field.Contains('"') || field.Contains('\r') || field.Contains('\n'); if (!mustQuote) return field; return "\"" + field.Replace("\"", "\"\"") + "\""; } }