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