87 lines
2.5 KiB
C#
87 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Logof_Client;
|
|
|
|
public class CsvBuilder
|
|
{
|
|
private readonly string Header;
|
|
private readonly List<object> Instances;
|
|
private readonly KasAddressList KasAddressList;
|
|
private readonly char Separator;
|
|
|
|
public CsvBuilder(string header, List<object> 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)
|
|
{
|
|
try
|
|
{
|
|
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("\"", "\"\"") + "\"";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.Log($"Error while escapting csv field: {ex.Message}",Logger.LogType.Warning);
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
}
|