118 lines
4.4 KiB
C#
118 lines
4.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
|
|
public class AddressPatch
|
|
{
|
|
public string refsid_is { get; set; } = "";
|
|
public string anrede_is { get; set; } = "";
|
|
public string titel_is { get; set; } = "";
|
|
public string vorname_is { get; set; } = "";
|
|
public string adel_is { get; set; } = "";
|
|
public string name_is { get; set; } = "";
|
|
public string namezus_is { get; set; } = "";
|
|
public string anredzus_is { get; set; } = "";
|
|
public string strasse_is { get; set; } = "";
|
|
public string strasse2_is { get; set; } = "";
|
|
public string plz_is { get; set; } = "";
|
|
public string ort_is { get; set; } = "";
|
|
public string land_is { get; set; } = "";
|
|
public string pplz_is { get; set; } = "";
|
|
public string postfach_is { get; set; } = "";
|
|
public string name1_is { get; set; } = "";
|
|
public string name2_is { get; set; } = "";
|
|
public string name3_is { get; set; } = "";
|
|
public string name4_is { get; set; } = "";
|
|
public string name5_is { get; set; } = "";
|
|
public string funktion_is { get; set; } = "";
|
|
public string funktion2_is { get; set; } = "";
|
|
public string abteilung_is { get; set; } = "";
|
|
public string funktionad_is { get; set; } = "";
|
|
|
|
public bool has_refsid { get; set; }
|
|
public bool has_anrede { get; set; }
|
|
public bool has_titel { get; set; }
|
|
public bool has_vorname { get; set; }
|
|
public bool has_adel { get; set; }
|
|
public bool has_name { get; set; }
|
|
public bool has_namezus { get; set; }
|
|
public bool has_anredzus { get; set; }
|
|
public bool has_strasse { get; set; }
|
|
public bool has_strasse2 { get; set; }
|
|
public bool has_plz { get; set; }
|
|
public bool has_ort { get; set; }
|
|
public bool has_land { get; set; }
|
|
public bool has_pplz { get; set; }
|
|
public bool has_postfach { get; set; }
|
|
public bool has_name1 { get; set; }
|
|
public bool has_name2 { get; set; }
|
|
public bool has_name3 { get; set; }
|
|
public bool has_name4 { get; set; }
|
|
public bool has_name5 { get; set; }
|
|
public bool has_funktion { get; set; }
|
|
public bool has_funktion2 { get; set; }
|
|
public bool has_abteilung { get; set; }
|
|
public bool has_funktionad { get; set; }
|
|
|
|
public static AddressPatch Import(Uri filename)
|
|
{
|
|
var patch = new AddressPatch();
|
|
|
|
// Alle Zeilen aus der Datei laden
|
|
var lines = File.ReadAllLines(filename.LocalPath);
|
|
|
|
// Alle Properties der Klasse (Strings und bools)
|
|
var properties = typeof(AddressPatch).GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
|
|
|
// Nur die Properties, die mit _is enden (also die String-Werte)
|
|
var stringProps = properties.Where(p => p.PropertyType == typeof(string) && p.Name.EndsWith("_is"));
|
|
|
|
foreach (var prop in stringProps)
|
|
{
|
|
// Beispiel: prop.Name = "name_is"
|
|
var baseName = prop.Name.Substring(0, prop.Name.Length - 3); // "name"
|
|
|
|
// In der Datei wird nach "name:" gesucht (ohne _is)
|
|
var line = lines.FirstOrDefault(l => l.StartsWith(baseName + ":"));
|
|
if (line != null)
|
|
{
|
|
// Wert extrahieren (alles nach dem Doppelpunkt)
|
|
var value = line.Substring(line.IndexOf(':') + 1).Trim();
|
|
|
|
// Wert im Patch-Objekt setzen
|
|
prop.SetValue(patch, value);
|
|
|
|
// Passendes has_ Feld aktivieren, z.B. "has_name"
|
|
var hasProp = properties.FirstOrDefault(p => p.Name == "has_" + baseName);
|
|
if (hasProp != null && hasProp.PropertyType == typeof(bool)) hasProp.SetValue(patch, true);
|
|
}
|
|
}
|
|
|
|
return patch;
|
|
}
|
|
|
|
|
|
public override string ToString()
|
|
{
|
|
var properties = GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
|
var stringProps = properties.Where(p => p.PropertyType == typeof(string) && p.Name.EndsWith("_is"));
|
|
|
|
var lines = new StringBuilder();
|
|
|
|
foreach (var prop in stringProps)
|
|
{
|
|
// passendes has_ Feld
|
|
var hasProp =
|
|
properties.FirstOrDefault(p => p.Name == "has_" + prop.Name.Substring(0, prop.Name.Length - 3));
|
|
if (hasProp != null && (bool)hasProp.GetValue(this))
|
|
{
|
|
var value = (string)prop.GetValue(this);
|
|
lines.AppendLine($"{prop.Name} => {value}");
|
|
}
|
|
}
|
|
|
|
return lines.ToString().TrimEnd();
|
|
}
|
|
} |