2 Commits

3 changed files with 90 additions and 33 deletions
+8 -1
View File
@@ -685,9 +685,16 @@ public partial class MainWindow : Window
foreach (var item in LstCustomerAdressSets.SelectedItems) foreach (var item in LstCustomerAdressSets.SelectedItems)
list.Add(Settings._instance.addressSets.GetAddressSetByID( list.Add(Settings._instance.addressSets.GetAddressSetByID(
Convert.ToInt32(item.ToString().Split(" - ")[0]))); Convert.ToInt32(item.ToString().Split(" - ")[0])));
try
{
StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "union"); StartCombine(list, Convert.ToInt32(LstCustomers.SelectedItem.ToString().Split(" - ")[0]), "union");
} }
catch
{
}
}
private void BtnCombineIntersection_OnClick(object? sender, RoutedEventArgs e) private void BtnCombineIntersection_OnClick(object? sender, RoutedEventArgs e)
{ {
+38 -26
View File
@@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
namespace Logof_Client; namespace Logof_Client;
@@ -30,34 +31,45 @@ public class CsvBuilder
result.AppendLine(Header); result.AppendLine(Header);
foreach (var l in KasAddressList.KasPersons) foreach (var l in KasAddressList.KasPersons)
result.AppendLine(string.Join(Separator, new[]
result.AppendLine( {
l.refsid + Separator + EscapeCsvField(l.refsid.ToString()),
l.anrede + Separator + EscapeCsvField(l.anrede),
l.titel + Separator + EscapeCsvField(l.titel),
l.vorname + Separator + EscapeCsvField(l.vorname),
l.adel + Separator + EscapeCsvField(l.adel),
l.name + Separator + EscapeCsvField(l.name),
l.namezus + Separator + EscapeCsvField(l.namezus),
l.anredzus + Separator + EscapeCsvField(l.anredzus),
l.strasse + Separator + EscapeCsvField(l.strasse),
l.strasse2 + Separator + EscapeCsvField(l.strasse2),
l.plz + Separator + EscapeCsvField(l.plz),
l.ort + Separator + EscapeCsvField(l.ort),
l.land + Separator + EscapeCsvField(l.land),
l.pplz + Separator + EscapeCsvField(l.pplz),
l.postfach + Separator + EscapeCsvField(l.postfach),
l.name1 + Separator + EscapeCsvField(l.name1),
l.name2 + Separator + EscapeCsvField(l.name2),
l.name3 + Separator + EscapeCsvField(l.name3),
l.name4 + Separator + EscapeCsvField(l.name4),
l.name5 + Separator + EscapeCsvField(l.name5),
l.funktion + Separator + EscapeCsvField(l.funktion),
l.funktion2 + Separator + EscapeCsvField(l.funktion2),
l.abteilung + Separator + EscapeCsvField(l.abteilung),
l.funktionad); EscapeCsvField(l.funktionad)
}));
// weitere Cases // weitere Cases
return result.ToString(); 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("\"", "\"\"") + "\"";
}
} }
+41 -3
View File
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text;
namespace Logof_Client; namespace Logof_Client;
@@ -41,7 +42,7 @@ public class DataImport
if (string.IsNullOrWhiteSpace(line)) if (string.IsNullOrWhiteSpace(line))
continue; continue;
var parts = line.Split(separator).Select(p => p.Trim()).ToArray(); var parts = ParseCsvLine(line, separator);
if (parts.Length < 24) if (parts.Length < 24)
{ {
@@ -107,7 +108,7 @@ public class DataImport
return (false, null); return (false, null);
} }
var headers = headerLine.Split(separator).Select(h => h.Trim()).ToArray(); var headers = ParseCsvLine(headerLine, separator);
var imported = var imported =
new KasAddressList(KasAddressList.GenerateName(Path.GetFileNameWithoutExtension(pathToCsv.LocalPath))); new KasAddressList(KasAddressList.GenerateName(Path.GetFileNameWithoutExtension(pathToCsv.LocalPath)));
@@ -126,7 +127,7 @@ public class DataImport
if (string.IsNullOrWhiteSpace(line)) if (string.IsNullOrWhiteSpace(line))
continue; continue;
var parts = line.Split(separator).Select(p => p.Trim()).ToArray(); var parts = ParseCsvLine(line, separator);
var fieldValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); var fieldValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
@@ -241,4 +242,41 @@ public class DataImport
{ {
return int.TryParse(input, out var result) ? result : 0; return int.TryParse(input, out var result) ? result : 0;
} }
private static string[] ParseCsvLine(string line, char separator)
{
var fields = new List<string>();
var current = new StringBuilder();
var inQuotes = false;
for (var i = 0; i < line.Length; i++)
{
var c = line[i];
if (c == '"')
{
if (inQuotes && i + 1 < line.Length && line[i + 1] == '"')
{
current.Append('"');
i++;
continue;
}
inQuotes = !inQuotes;
continue;
}
if (c == separator && !inQuotes)
{
fields.Add(current.ToString().Trim());
current.Clear();
continue;
}
current.Append(c);
}
fields.Add(current.ToString().Trim());
return fields.ToArray();
}
} }