+#!/usr/bin/python3
+'''
+Created on 10.01.2024
+
+@author: sparky2021
+'''
+
+import sys
+
+if __name__ == '__main__':
+ pass
+
+def rd_opt_qval(s):
+ if s[0] == '"':
+ s = s[1:-1]
+ return s
+
+numArgs = len(sys.argv)
+if (numArgs != 4):
+ raise RuntimeError("usage: sv-merger EXPORT DELTA FIELD")
+
+
+dh_export = open(sys.argv[1])
+dh_delta = open(sys.argv[2])
+dh_import = open("import.csv", "w")
+
+# Lese die Kopfzeile aus EXPORT
+line = dh_export.readline().rstrip()
+print(line, file=dh_import)
+export_header = line.split(";")
+
+sv_pn_spalte = -1
+sv_such_spalte = -1
+
+i = 0
+for kopf in export_header:
+ if kopf[0] == '"':
+ kopf = kopf[1:-1]
+ if kopf == 'Freifeldwert_1':
+ sv_pn_spalte = i
+ if kopf == sys.argv[3]:
+ sv_such_spalte = i
+ i += 1
+
+if sv_pn_spalte == -1:
+ raise RuntimeError("S-Verein-Export enthält keine Partnernummer")
+if sv_such_spalte == -1:
+ raise RuntimeError("S-Verein-Export enthält nicht das gewünschte Datenfeld "+sys.argv[3])
+
+line = dh_delta.readline().rstrip()
+delta_header = line.split(",")
+
+delta_pn_sp = -1
+delta_such_sp = -1
+
+i = 0
+for kopf in delta_header:
+ print (kopf)
+ if rd_opt_qval(kopf) == "Partnernummer":
+ delta_pn_sp = i
+ if kopf == sys.argv[3]:
+ delta_such_sp = i
+ i += 1
+
+if delta_pn_sp == -1:
+ raise RuntimeError("Delta-Datei enthält keine Partnernummer")
+if delta_such_sp == -1:
+ raise RuntimeError("Delta-Datei enthält nicht das gewünschte Datenfeld")
+
+delta = {}
+for line in dh_delta:
+ if len(line.rstrip()):
+ # not a empty line
+ data = line.split(";")
+ if len(data[delta_pn_sp]) == 0:
+ print("Diese Zeile hat keine Migliedsnummer: ", line)
+ else:
+ delta[int(data[delta_pn_sp])] = data[delta_such_sp]
+
+for line in dh_export:
+ data = line.rstrip().split(";")
+ pn = data[sv_pn_spalte]
+ if len(pn) == 0:
+ print("Diese Zeile (export) hat keine Migliedsnummer: ", line)
+ else:
+ if pn[0] == '"':
+ pn = pn[1:-1]
+ pn = int(pn)
+ if pn in delta:
+ if len(delta[pn]):
+ if data[sv_such_spalte] != delta[pn]:
+ data[sv_such_spalte] = delta[pn]
+ print(";".join(data), file=dh_import)
+ else:
+ print(f"{pn} fehlt in delta-Datei")
+
+dh_export.close()
+dh_delta.close()
+dh_import.close()
+
+'''
+Argumente:
+
+EXPORT: Export-Datei aus S-Verein
+
+DELTA: csv-Daten, die eingearbeitet werden sollen
+
+FIELD: Feld, das eingearbeitet werden soll, wenn
+ - Das Quellfeld nicht leer ist
+ - Sich der Wert von der EXPORT-Datei unterscheidet
+
+Die Synchronisation der Daten erfolgt anhand der Partnernummer.
+
+Das Ergebnis wird stets in die Datei import.csv geschrieben.
+'''