pydev-s6
authorMichael Wagner <michael@wagnertech.de>
Wed, 10 Jan 2024 11:13:15 +0000 (12:13 +0100)
committerMichael Wagner <michael@wagnertech.de>
Wed, 10 Jan 2024 11:13:15 +0000 (12:13 +0100)
python/sv-merger/sv-merger.py [new file with mode: 0644]

diff --git a/python/sv-merger/sv-merger.py b/python/sv-merger/sv-merger.py
new file mode 100644 (file)
index 0000000..52c654e
--- /dev/null
@@ -0,0 +1,95 @@
+'''
+Created on 10.01.2024
+
+@author: sparky2021
+'''
+
+import sys
+
+if __name__ == '__main__':
+    pass
+
+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:
+    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:
+    if 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(";")
+        delta[data[delta_pn_sp]] = data[delta_such_sp]
+
+for line in dh_export:
+    data = line.rstrip().split(";")
+    pn = data[sv_pn_spalte][1:-1] 
+    if pn in delta:
+        if len(delta[pn]):
+            data[sv_such_spalte] = delta[pn]
+            print(";".join(data), file=dh_import)
+
+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.
+'''