]> wagnertech.de Git - SVBaL.git/blob - python/sv-merger/sv-merger.py
posaune
[SVBaL.git] / python / sv-merger / sv-merger.py
1 #!/usr/bin/python3
2 '''
3 Created on 10.01.2024
4
5 @author: sparky2021
6 '''
7
8 import sys
9
10 if __name__ == '__main__':
11     pass
12
13 numArgs = len(sys.argv)
14 if (numArgs != 4):
15     raise RuntimeError("usage: sv-merger EXPORT DELTA FIELD") 
16
17
18 dh_export = open(sys.argv[1])
19 dh_delta  = open(sys.argv[2])
20 dh_import = open("import.csv", "w")
21
22 # Lese die Kopfzeile aus EXPORT
23 line = dh_export.readline().rstrip()
24 print(line, file=dh_import)
25 export_header = line.split(";")
26
27 sv_pn_spalte = -1
28 sv_such_spalte = -1
29
30 i = 0
31 for kopf in export_header:
32     if kopf[0] == '"':
33         kopf = kopf[1:-1]
34     if kopf == 'Freifeldwert_1':
35         sv_pn_spalte = i
36     if kopf == sys.argv[3]:
37         sv_such_spalte = i
38     i += 1
39
40 if sv_pn_spalte == -1:
41     raise RuntimeError("S-Verein-Export enthält keine Partnernummer")
42 if sv_such_spalte == -1:
43     raise RuntimeError("S-Verein-Export enthält nicht das gewünschte Datenfeld "+sys.argv[3])
44
45 line = dh_delta.readline().rstrip()
46 delta_header = line.split(";")
47
48 delta_pn_sp = -1
49 delta_such_sp = -1
50
51 i = 0
52 for kopf in delta_header:
53     if kopf == "Partnernummer":
54         delta_pn_sp = i
55     if kopf == sys.argv[3]:
56         delta_such_sp = i
57     i += 1
58
59 if delta_pn_sp == -1:
60     raise RuntimeError("Delta-Datei enthält keine Partnernummer")
61 if delta_such_sp == -1:
62     raise RuntimeError("Delta-Datei enthält nicht das gewünschte Datenfeld")
63
64 delta = {}
65 for line in dh_delta:
66     if len(line.rstrip()):
67         # not a empty line
68         data = line.split(";")
69         if len(data[delta_pn_sp]) == 0:
70             print("Diese Zeile hat keine Migliedsnummer: ", line)
71         else:
72             delta[int(data[delta_pn_sp])] = data[delta_such_sp]
73
74 for line in dh_export:
75     data = line.rstrip().split(";")
76     pn = data[sv_pn_spalte]
77     if len(pn) == 0:
78         print("Diese Zeile (export) hat keine Migliedsnummer: ", line)
79     else:
80         if pn[0] == '"':
81             pn = pn[1:-1]
82         pn = int(pn)
83         if pn in delta:
84             if len(delta[pn]):
85                 if data[sv_such_spalte] != delta[pn]:
86                     data[sv_such_spalte] = delta[pn]
87                     print(";".join(data), file=dh_import)
88         else:
89             print(f"{pn} fehlt in delta-Datei")
90
91 dh_export.close()
92 dh_delta.close()
93 dh_import.close()
94
95 '''
96 Argumente:
97
98 EXPORT: Export-Datei aus S-Verein
99
100 DELTA: csv-Daten, die eingearbeitet werden sollen
101
102 FIELD: Feld, das eingearbeitet werden soll, wenn
103  - Das Quellfeld nicht leer ist
104  - Sich der Wert von der EXPORT-Datei unterscheidet
105
106 Die Synchronisation der Daten erfolgt anhand der Partnernummer.
107
108 Das Ergebnis wird stets in die Datei import.csv geschrieben.
109 '''