]> wagnertech.de Git - SVBaL.git/blob - python/sv-merger/sv-merger.py
gitarre
[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     kopf = kopf[1:-1]
33     if kopf == 'Freifeldwert_1':
34         sv_pn_spalte = i
35     if kopf == sys.argv[3]:
36         sv_such_spalte = i
37     i += 1
38
39 if sv_pn_spalte == -1:
40     raise RuntimeError("S-Verein-Export enthält keine Partnernummer")
41 if sv_such_spalte == -1:
42     raise RuntimeError("S-Verein-Export enthält nicht das gewünschte Datenfeld "+sys.argv[3])
43
44 line = dh_delta.readline().rstrip()
45 delta_header = line.split(";")
46
47 delta_pn_sp = -1
48 delta_such_sp = -1
49
50 i = 0
51 for kopf in delta_header:
52     if kopf == "Partnernummer":
53         delta_pn_sp = i
54     if kopf == sys.argv[3]:
55         delta_such_sp = i
56     i += 1
57
58 if delta_pn_sp == -1:
59     raise RuntimeError("Delta-Datei enthält keine Partnernummer")
60 if delta_such_sp == -1:
61     raise RuntimeError("Delta-Datei enthält nicht das gewünschte Datenfeld")
62
63 delta = {}
64 for line in dh_delta:
65     if len(line.rstrip()):
66         # not a empty line
67         data = line.split(";")
68         delta[int(data[delta_pn_sp])] = data[delta_such_sp]
69
70 for line in dh_export:
71     data = line.rstrip().split(";")
72     pn = data[sv_pn_spalte][1:-1]
73     if len(pn):
74        pn = int(pn)
75        if pn in delta:
76            if len(delta[pn]):
77                if data[sv_such_spalte] != delta[pn]:
78                   data[sv_such_spalte] = delta[pn]
79                   print(";".join(data), file=dh_import)
80
81 dh_export.close()
82 dh_delta.close()
83 dh_import.close()
84
85 '''
86 Argumente:
87
88 EXPORT: Export-Datei aus S-Verein
89
90 DELTA: csv-Daten, die eingearbeitet werden sollen
91
92 FIELD: Feld, das eingearbeitet werden soll, wenn
93  - Das Quellfeld nicht leer ist
94  - Sich der Wert von der EXPORT-Datei unterscheidet
95
96 Die Synchronisation der Daten erfolgt anhand der Partnernummer.
97
98 Das Ergebnis wird stets in die Datei import.csv geschrieben.
99 '''