[fix:] csv-import now recognizes quotation marks

This commit is contained in:
2026-04-16 12:49:45 +02:00
parent ac7b23cc28
commit 5ccd4a4e99
2 changed files with 81 additions and 31 deletions
+42 -4
View File
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
namespace Logof_Client;
@@ -41,7 +42,7 @@ public class DataImport
if (string.IsNullOrWhiteSpace(line))
continue;
var parts = line.Split(separator).Select(p => p.Trim()).ToArray();
var parts = ParseCsvLine(line, separator);
if (parts.Length < 24)
{
@@ -107,7 +108,7 @@ public class DataImport
return (false, null);
}
var headers = headerLine.Split(separator).Select(h => h.Trim()).ToArray();
var headers = ParseCsvLine(headerLine, separator);
var imported =
new KasAddressList(KasAddressList.GenerateName(Path.GetFileNameWithoutExtension(pathToCsv.LocalPath)));
@@ -126,7 +127,7 @@ public class DataImport
if (string.IsNullOrWhiteSpace(line))
continue;
var parts = line.Split(separator).Select(p => p.Trim()).ToArray();
var parts = ParseCsvLine(line, separator);
var fieldValues = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
@@ -241,4 +242,41 @@ public class DataImport
{
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();
}
}