Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: Zähle...
|
Hallo Zusammen,
Hallo NoKurth, habe mal, soweit wie es in meinen Fähigkeiten lag, dass Skript vom User NoKurth mit dem meinem "zusammengeführt". Folgende Funktionen laufen noch nicht:
a – Alle Gesetze herunterladen Weiter sollte noch eine negative Ausgaben erscheinen, wenn ein bestimmtes/gesuchtes Gesetzt nicht gefunden wurde. Bin für Hilfe dankbar ☺ Schönen Abend noch! - Jeanbarth
- gesetze2.sh (4.7 KiB)
- Download gesetze2.sh
|
NoKurth
Anmeldungsdatum: 18. August 2006
Beiträge: 430
|
Hallo Jeanbarth, ich finde es toll, dass du dich an die Aufgabe des Zusammenführens heran gemacht hast. Nur warum hast du diese Anmerkung nicht gleich mit umgesetzt? Keba schrieb: [...]
[...]
Mehr von mir dann ab Ende nächster Woche... Viele Grüße Norman
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hi, warum ich das nicht gleich mit umgesetzt habe?
Nunja, war froh, dass es überhaupt "einigermaßen" läuft ☺ Und ganz ehrlich, ich habe einfach nicht dran gedacht.
Kann das ja im laufe der Woche ja mal umsetzen. Dann bin ich ja mal gespannt, was von dir Ende nächster Woche kommt ☺ Gruß - Jeanbarth
EDIT: Anbei nochmal ne neue Version, mit besser Speicherort-auswahl!
- gesetze2.sh (5.7 KiB)
- Download gesetze2.sh
|
NoKurth
Anmeldungsdatum: 18. August 2006
Beiträge: 430
|
Hallo, hier nun (endlich?) die versprochene überarbeitete Version. Einige "ToDo" sind noch offen - alle Interessierten sind hiermit herzlich eingeladen diese abzuarbeiten bzw. Verbesserungen/Verbesserungsvorschläge zu unterbreiten. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467 | #!/bin/bash
# Fuktion: liest alle verfügbaren Gesetze von "www.gesetze-im-internet.de" aus, um dann ein
# vom Benutzer angegebenes herunter zu laden
# ToDo: - Eingaben pruefen (read GESETZ; read NUMMER)
# - pruefen, ob read GESETZ Treffer ergeben hat
# erledigt:
# - Liste mit allen Gesetzen nur auf Anforderung (oder wenn nicht verfuegbar) herunter laden - Norman, 28.07.2011
# - Zielverzeichnis eingeben oder aus Variable lesen (nicht nur aktuelles) - Norman, 28.07.2011
# - tmp-File im Homeverzeichnis (bzw. einem Unterverzeichnis) dauerhaft ablegen - Norman, 28.07.2011
# - Update bestehender Gesetze (grep auf Kurzname in Datei -> neues wget) - Norman, 29.07.2011
# - LOG-Ausgaben nur, wenn Parameter angegeben wurde - Norman, 29.07.2011
# bekannte Fehler:
# - wird beim Auswahlö der Gesetze einfach <Enter> gedrueckt, wird unter Umstaenden eine Datei ".pdf" (versteckt) angelegt
# Pfad und Name der Config-Datei
CONFIGFILE=~/.gesetze/conf.txt
# Debug-Schalter
set -o nounset
#set -o verbose
#set -o xtrace
# UEbersicht ueber geworfene Error-Codes
# 0 - alles in Ordnung
# 100 - kann Verzeichnis nicht anlegen
# 101 - kann Datei nicht anlegen
# 150 - Fehler in LOG1()
# 151 - Fehler in legeVerzeichnisAn()
# 152 - Fehler in legeDateiAn()
# 153 - Fehler in Abbruch()
# 154 - Fehler in schreibeConfig()
# 155 - Fehler in ladeGesetz()
# -------------------------------------------------------------------------
# gibt eine Meldung aus und beendet das Programm mit einem Error-Code
# Paraemter1 - Meldung, dies ausgegeben werden soll
# Parameter2 - Error-Code
Abbruch() {
# Anzahl der Parameter ueberpruefen
if [[ ${#} -eq 2 ]]
then
echo "ABBRUCH: ${1}" >&2
exit ${2}
else
Abbruch "Abbruch() - Anzahl der Parameter stimmen nicht!" 153
fi
}
# -------------------------------------------------------------------------
# Routine, um Statusmeldungen auszugeben
# Parameter1 - Meldung, die ausgegeben werden soll
LOG1() {
# Anzahl der Parameter ueberpruefen
if [[ ${#} -eq 1 ]]
then
echo -e "${1}"
else
Abbruch "LOG1 - Anzahl der Parameter stimmen nicht!" 150
fi
}
# -------------------------------------------------------------------------
# Routine, um DEBUG-Meldungen auszugeben
# Parameter1 - Meldung, die ausgegeben werden soll
LOG2() {
[[ ${VERBOSE} -eq 1 ]] && echo -e "DEBUG: "${1} >&2
}
# -------------------------------------------------------------------------
# legt ein Verzeichnis an
# Parameter1 - Verzeichnis, welches angelegt werden soll
legeVerzeichnisAn() {
# Anzahl der Parameter ueberpruefen
if [[ ${#} -eq 1 ]]
then
DateiDir=${1}
mkdir -p ${DateiDir} 2> /dev/null
if [[ ${?} -ne 0 ]]
then
Abbruch "Kann Verzeichnis '${DateiDir}' nicht anlegen! -> Ende" 100
fi
else
Abbruch "legeVerzeichnisAn() - Anzahl der Parameter stimmen nicht!" 151
fi
}
# -------------------------------------------------------------------------
# legt eine Datei an
# Parameter - Datei, die angelegt werden soll
legeDateiAn() {
# Anzahl der Parameter ueberpruefen
if [[ ${#} -eq 1 ]]
then
AnlegeDatei=${1}
# testen, ob Config-File bereits vorhanden ist
if [[ ! -f ${AnlegeDatei} ]]
then
# Config-File ist nicht vorhanden
DateiDir=$(dirname ${AnlegeDatei})
legeVerzeichnisAn ${DateiDir}
fi
touch ${AnlegeDatei} 2> /dev/null
if [[ ${?} -ne 0 ]]
then
Abbruch "Kann Datei '${AnlegeDatei}' nicht anlegen! -> Ende" 101
fi
else
Abbruch "legeDateiAn() - Anzahl der Parameter stimmen nicht!" 152
fi
}
# -------------------------------------------------------------------------
# laedt einen Eintrag aus der Config-Datei
# Parameter1 - Wert der geladen werdne soll
# HINWEIS: wird ein Parameter mehrfach in der Config-Datei gefunden, wird nur der letzte-Eintrag ausgewertet
ladeConfig() {
# Anzahl der Parameter ueberpruefen
if [[ ${#} -eq 1 ]]
then
ReadWert=${1}
# Standard-Werte, die im Config-File geaendert werden koennen
# HINWEIS: NICHT hier anpassen!!!
ParamStart=(BASISURL http://www.gesetze-im-internet.de \
STARTSEITE aktuell.html \
DOWNLOADDIR ~/Gesetze
KATALOG ~/.gesetze/Katalog.csv
)
legeDateiAn ${CONFIGFILE}
# Versuch den angeforderten Parameter zu lesen
FundStelle=$(grep "^[[:space:]]*${ReadWert}=.*$" ${CONFIGFILE})
if [[ ${?} -eq 0 ]]
then
# min 1x gefunden -> noch einmal lesen und zerlegen
FundStelle=$(grep "^[[:space:]]*${ReadWert}=.*$" ${CONFIGFILE} | \
tail -n 1 | \
sed 's|^[[:space:]]*'${ReadWert}'=||g')
else
# Standard-Wert schreiben
AnzahlParamStart=${#ParamStart[*]}
(( AnzahlParamStart -= 1 ))
for lauf in $(seq 0 2 ${AnzahlParamStart})
do
(( mehr = ${lauf} + 1 ))
if [[ ${ParamStart[${lauf}]} = ${ReadWert} ]]
then
echo "${ParamStart[${lauf}]}=${ParamStart[${mehr}]}" >> ${CONFIGFILE}
FundStelle=${ParamStart[${mehr}]}
fi
done
fi
# gefundenen (oder Standard-Parameter) ausgeben
echo ${FundStelle}
else
Abbruch "ladeConfig() - Anzahl der Parameter stimmen nicht!" 152
fi
}
# -------------------------------------------------------------------------
# schreibt einen Eintrag in die Config-Datei
# Parameter1 - Name des Eintrags
# Parameter2 - Wert des Eintrags
schreibeConfig() {
# Anzahl der Parameter ueberpruefen
if [[ ${#} -eq 2 ]]
then
ParamName=${1}
ParamWert=${2}
FundStelle=$(grep "^[[:space:]]*${ParamName=}=.*$" ${CONFIGFILE})
if [[ ${?} -eq 0 ]]
then
sed -i 's|^[[:space:]]*'${ParamName=}'=.*$|'${ParamName}'='${ParamWert}'|g' ${CONFIGFILE}
else
echo "${ParamStart[${lauf}]}=${ParamStart[${mehr}]}" >> ${CONFIGFILE}
fi
else
Abbruch "schreibeConfig() - Anzahl der Parameter stimmen nicht!" 154
fi
}
# -------------------------------------------------------------------------
# fragt den Speicherort fuer die Gesetze ab
SpeicherortAbfragen() {
cat << ENDE
Bitte geben Sie das Verzeichnis ein, in dem die Gesetze gespeichert werden sollen.
Wenn Sie die Vorgabe uebernehmen wollen, druecken Sie einfach <Enter>.
ENDE
read -i "${DOWNLOADDIR}" -p "Zielverzeichnis: " -e DownloadVerzeichnis
legeVerzeichnisAn ${DownloadVerzeichnis}
schreibeConfig DOWNLOADDIR ${DownloadVerzeichnis}
}
# -------------------------------------------------------------------------
# gibt den Stand eienr Datei aus
# Return - Stand der Datei
StandDatei() {
inDatei=${1}
LANG=C stat ${inDatei} | awk -F "[ .-]" '/Change/ { print $4"."$3"."$2", "$5; }'
}
# -------------------------------------------------------------------------
# gibt die Anzahl der Gesetze in der Katalog-Datei aus
# Return - Anzahl der Gesetze
AnzahlGesetzeInKatalog() {
wc -l < ${KATALOG}
}
# -------------------------------------------------------------------------
# ermittelt die lokal vorhandenen Gesetze
# Return - Liste mit Gesetzen
# HINWEIS1: es werden nur Gesetzt ermittelt, die auch im KATALOG vorhanden sind
# HINWEIS2: Gross-/Kleinschreibung der Dateinamen wird beruecksichtigt
vorhandeneGesetze() {
# init
LaufNr=0
Liste=""
# alle gefundenen PDF-Datei durchlaufen
for GesetzLauf in $(find ${DOWNLOADDIR} -maxdepth 1 -type f -iname "*pdf" | sort)
do
# %% - Suffix abschneiden
# basename - Pfad entfernen
KurzGesetzname=/$(basename ${GesetzLauf%%\.pdf})/
# im Katalog nachschlagen, ob Gesetzt dort vorhanden ist
grep -q ${KurzGesetzname} ${KATALOG}
if [[ ${?} -eq 0 ]]
then
# nur in Liste aufnehmen, wenn Gesetz auch im Katalog vorhanden ist; andere PDFs ignorieren
Liste[${LaufNr}]=${KurzGesetzname}
(( LaufNr += 1 ))
fi
done
# Liste ausgeben
echo ${Liste[*]}
}
# -------------------------------------------------------------------------
# ermittelt die Anzahl der lokal vorhandene Gesetze
# Return - Anzahl der Gesetze
AnzahlGesetzeInDir() {
Gesetze=($(vorhandeneGesetze))
echo ${#Gesetze[*]}
}
# -------------------------------------------------------------------------
# zeigt das Hauptmenue an
MainMenu() {
clear
cat << ENDE
********************************************************************************
Gesetzestexte
(Quelle: ${BASISURL})
--------------------------------------------------------------------------------
(K)atalogdatei aktualisieren (Stand: $(StandDatei ${KATALOG}))
(Z)ielverzeichnis aendern (aktuell: ${DOWNLOADDIR})
(e)in bestimmtes Gesetz als PDF herunterladen
(a)lle Gesetze als PDF herunterladen (Anzahl: $(AnzahlGesetzeInKatalog))
UEber(s)icht vorhandener Gesetze
(b)estehende Gesetze aktualisieren (gefunden: $(AnzahlGesetzeInDir))
Quell(t)ext anzeigen
ENDE
********************************************************************************"
ENDE
}
# -------------------------------------------------------------------------
# laedt ein Gesetzt ins Zielverzeichnis herunter
# Parameter1: Zeile, so wie sie in KATALOG steht
ladeGesetz() {
# Anzahl der Parameter ueberpruefen
if [[ ${#} -eq 1 ]]
then
ZeileAusKatalog=${1}
# Zielverzeichnis anlegen
legeVerzeichnisAn ${DOWNLOADDIR}
# von Trefferzeile den 1. Teil (vor ;) rausschneiden --> Langname
GesetzName=$(echo ${ZeileAusKatalog} | sed "s|\(^.*\);\(.*\)$|\1|")
# von Trefferzeile den 2. Teil (nach ;) rausschneiden --> URL
GesetzURL=$(echo ${ZeileAusKatalog} | sed "s|^\(.*\);\(.*\)$|\2|")
# aus URL den Kurzname vom Gesetz ermitteln (Aufbau ../bundesrecht/<Kurzname>/gesamt.pdf)
KurzName=$(echo ${GesetzURL} | awk -F [\/] ' // { print $3; } ')
# passendes Gesetz herunterladen
# in das gewählte Verzeichnis verschieben
LOG1 "- Lade '${GesetzName}' als '${KurzName}.pdf' herunter..."
wget -cq -O ${DOWNLOADDIR}/${KurzName}.pdf "${BASISURL}/${GesetzURL}"
LOG2 "Gesetz wurde im Verzeichnis '${DOWNLOADDIR}' abelegt."
else
Abbruch "ladeGesetz() - Anzahl der Parameter stimmen nicht!" 155
fi
}
# -------------------------------------------------------------------------
# fragt beim Benutzer nach, welches Gesetzt heruntergeladen werden soll - und tut dies dann
ladeGesetzAuswahl() {
# Gesetzname abfragen
# aufpassen mit deutschen Umlauten, dass kann Probleme geben!!!
read -p "Bitte Gesetz eingeben (auch Teilzeichenketten oder Abkuerzungen): " -e GESETZ
# alle passende Gesetze anzeigen und Zeilen nummerieren
# grep - passende Zeilen suchen
# sed - nur Name anzeigen, URL verschweigen
# nl - Zeilen nummerieren
grep -i ${GESETZ} ${KATALOG} | sed "s|^\(.*\);.*$|\1|" | nl
read -p "Bitte Nummer eingeben: " -e NUMMER
# gewuenschte Zeile ermitteln
# grep - Zeile suchen
# head - Block mit gewuenschten Zeilen heraustrennen
# tail - letzte Zeile ist die eingegebenen
GESETZGESAMT=$(grep -i ${GESETZ} ${KATALOG} | head -n ${NUMMER} | tail -n 1)
ladeGesetz "${GESETZGESAMT}"
}
# -------------------------------------------------------------------------
# laedt alle Gesetze aus dem Katalog herunter
ladeGesetzAlle() {
GesamtAnzahl=$(AnzahlGesetzeInKatalog)
AktGesetz=0
while read -e KatalogZeile
do
(( AktGesetz += 1 ))
LOG1 "*** bearbeite ${AktGesetz}/${GesamtAnzahl}..."
ladeGesetz "${KatalogZeile}"
done < ${KATALOG}
}
# -------------------------------------------------------------------------
# wartet auf die Eingabe des Benutzers
warten() {
read -p "Zum Fortsetzen <Enter> druecken... " -e TMPVAR
}
# -------------------------------------------------------------------------
# aktualisiert alle vorhandenen Gesetze
aktualisiereGesetze() {
LOG1 "\nVorhandene Gesetze werden nur neu herunter geladen, wenn sich diese auch auf dem Server geaendert haben!\n"
for Lauf in $(vorhandeneGesetze)
do
GesetzZeile=$(grep ${Lauf} ${KATALOG} | head -n 1)
ladeGesetz "${GesetzZeile}"
done
}
# -------------------------------------------------------------------------
# zeigt den Status aller (bekannten) Gesetze an
zeigeGesetzStatus() {
for Lauf in $(vorhandeneGesetze)
do
GesetzZeile=$(grep ${Lauf} ${KATALOG} | head -n 1)
# von Trefferzeile den 1. Teil (vor ;) rausschneiden --> Langname
GesetzName=$(echo ${GesetzZeile} | sed "s|\(^.*\);\(.*\)$|\1|")
# von Trefferzeile den 2. Teil (nach ;) rausschneiden --> URL
GesetzURL=$(echo ${GesetzZeile} | sed "s|^\(.*\);\(.*\)$|\2|")
# aus URL den Kurzname vom Gesetz ermitteln (Aufbau ../bundesrecht/<Kurzname>/gesamt.pdf)
KurzName=$(echo ${GesetzURL} | awk -F [\/] ' // { print $3; } ').pdf
LOG1 "$(StandDatei ${DOWNLOADDIR}/${KurzName}) - ${GesetzName} (${KurzName})"
done
}
# -------------------------------------------------------------------------
# aktualisiert den Katalog mit Gesetzen
KatalogAktualisieren() {
legeDateiAn ${KATALOG}
# alle Unterseiten mit Gesetzen herunterladen
# wget - Hauptseite laden
# sed - alle " in <NewLine> wandeln
# grep - nur Zeilen mit "teilliste..." weiter verarbeiten
# while - alle Zeilen vom grep weiter bearbeiten
# wget - Unterseiten herunter laden
# iconv - konvertieren, damit deutsche Umlaute richtig angezeigt werden
# set - unnuetzen Text entfernen
# awk - Zeile mit "gesamt.pdf" heraussuchen - nur Titel und Teilurl ausgeben
# sort - sortieren und doppelte Zeilen entfernen
# > - in Datei speichern
LOG1 "- aktualisiere den Katalog mit verfuegbaren Gesetzen..."
wget -c ${BASISURL}/${STARTSEITE} -q -O - | \
sed "s|\"|\n|g" | \
grep -i "teilliste_[a-z0-9]\." | \
while read -e SEITE
do
LOG2 "-- verarbeite Unterseite '${SEITE}'..."
wget -cq -O - ${BASISURL}/${SEITE}| \
iconv -f iso-8859-1 -t utf-8 | \
sed "s| ||g" | \
awk -F [\<\"] '/gesamt\.pdf/ { print $1";"$3; } '
done | \
sort -u \
> ${KATALOG}
}
# -------------------------------------------------------------------------
# ----- MAIN --------------------------------------------------------------
# -------------------------------------------------------------------------
# testen, ob "DEBUG-Modus"
VERBOSE=0
if [[ ${#} -gt 0 ]]
then
if [[ ${1} = "-v" || ${1} = "-V" ]]
then
VERBOSE=1
fi
fi
# erst einmal Parameter laden
BASISURL=$(ladeConfig BASISURL)
STARTSEITE=$(ladeConfig STARTSEITE)
KATALOG=$(ladeConfig KATALOG)
DOWNLOADDIR=$(ladeConfig DOWNLOADDIR)
# Download-Verzeichnis anlegen
legeVerzeichnisAn ${DOWNLOADDIR}
# testen, ob Katalog leer (-s - Datei und Groesse 0), wenn ja -> Download
[[ ! -s ${KATALOG} ]] && KatalogAktualisieren
# Hauptprogrammschleife
ENDE=0
while [[ ${ENDE} -eq 0 ]]
do
MainMenu
read -p "Bitte wählen Sie den gewünschten Punkt: " -e Auswahl
case ${Auswahl} in
K|k) # Katalog aktualisieren
KatalogAktualisieren
;;
Z|z) # Speicherort abfragen
SpeicherortAbfragen
DOWNLOADDIR=$(ladeConfig DOWNLOADDIR)
;;
E|e) # bestimmtes Gesetz herunter laden
ladeGesetzAuswahl
warten
;;
A|a) # alle Gesetze herunter laden
ladeGesetzAlle
;;
S|s) # UEbersicht vorhandener Gesetze
zeigeGesetzStatus
warten
;;
B|b) # bestehende Gesetze aktualisieren
aktualisiereGesetze
warten
;;
T|t) # Quelltext anzeigen
# HINWEIS: hier ein grafisches Programm aufzurufen ist gewfaehrlich, da dies
# bei SSH-Verbindungen Probleme macht
LOG1 "\nZum Beenden der Quelltextanzeige 'q' druecken."
warten
nl "${0}" | less
;;
*) ENDE=1
LOG1 "\nDanke und auf Wiedersehen!\n"
;;
esac
done
exit 0
|
Viele Grüße Norman PS: Veränderungen am Code (nach Möglichkeit) bitte als patch-taugliche Datei. diff -uNr old new > patchfile Verbale Beschreibungen sind immer ziemlich aufwendig einzuarbeiten.
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hi Norman, vorab: danke für deine Mühe, Arbeit und Zeit!!! Bei mir wird folgendes angezeigt: | 126: Syntax error: "(" unexpected (expecting "fi")
|
Kann aber nichts finden.... Gruß
-Jeanbarth
|
NoKurth
Anmeldungsdatum: 18. August 2006
Beiträge: 430
|
Hallo Jeanbarth, Jeanbarth schrieb: [...]
| 126: Syntax error: "(" unexpected (expecting "fi")
|
[...]
Kann es sein, dass du in der ersten Zeile "bash" gegen "dash" getauscht hast? Was gibt denn
| readlink -f $(which bash)
|
bei dir aus? Sollte das Ergebnis nicht "/bin/bash" lauten, kann es so nicht funktionieren. Hier die Version, die auch mit der Dash funktioniert. Unterschied zur Bash-Version (die ich nicht weiter pflegen werde): Bei der Eingabe des Zielpfads (Menü Z) ist jetzt nichts mehr voreingestellt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465 | #!/bin/dash
# Fuktion: liest alle verfügbaren Gesetze von "www.gesetze-im-internet.de" aus, um dann ein
# vom Benutzer angegebenes herunter zu laden
# ToDo: - Eingaben pruefen (read GESETZ; read NUMMER)
# - pruefen, ob read GESETZ Treffer ergeben hat
# erledigt:
# - Liste mit allen Gesetzen nur auf Anforderung (oder wenn nicht verfuegbar) herunter laden - Norman, 28.07.2011
# - Zielverzeichnis eingeben oder aus Variable lesen (nicht nur aktuelles) - Norman, 28.07.2011
# - tmp-File im Homeverzeichnis (bzw. einem Unterverzeichnis) dauerhaft ablegen - Norman, 28.07.2011
# - Update bestehender Gesetze (grep auf Kurzname in Datei -> neues wget) - Norman, 29.07.2011
# - LOG-Ausgaben nur, wenn Parameter angegeben wurde - Norman, 29.07.2011
# bekannte Fehler:
# - wird beim Auswahlö der Gesetze einfach <Enter> gedrueckt, wird unter Umstaenden eine Datei ".pdf" (versteckt) angelegt
# Pfad und Name der Config-Datei
CONFIGFILE=~/.gesetze/conf.txt
# Debug-Schalter
set -o nounset
#set -o verbose
#set -o xtrace
# UEbersicht ueber geworfene Error-Codes
# 0 - alles in Ordnung
# 100 - kann Verzeichnis nicht anlegen
# 101 - kann Datei nicht anlegen
# 150 - Fehler in LOG1()
# 151 - Fehler in legeVerzeichnisAn()
# 152 - Fehler in legeDateiAn()
# 153 - Fehler in Abbruch()
# 154 - Fehler in schreibeConfig()
# 155 - Fehler in ladeGesetz()
# -------------------------------------------------------------------------
# gibt eine Meldung aus und beendet das Programm mit einem Error-Code
# Paraemter1 - Meldung, dies ausgegeben werden soll
# Parameter2 - Error-Code
Abbruch() {
# Anzahl der Parameter ueberpruefen
if [ ${#} -eq 2 ]
then
/bin/echo "ABBRUCH: ${1}" >&2
exit ${2}
else
Abbruch "Abbruch() - Anzahl der Parameter stimmen nicht!" 153
fi
}
# -------------------------------------------------------------------------
# Routine, um Statusmeldungen auszugeben
# Parameter1 - Meldung, die ausgegeben werden soll
LOG1() {
# Anzahl der Parameter ueberpruefen
if [ ${#} -eq 1 ]
then
/bin/echo -e "${1}"
else
Abbruch "LOG1 - Anzahl der Parameter stimmen nicht!" 150
fi
}
# -------------------------------------------------------------------------
# Routine, um DEBUG-Meldungen auszugeben
# Parameter1 - Meldung, die ausgegeben werden soll
LOG2() {
[ ${VERBOSE} -eq 1 ] && /bin/echo -e "DEBUG: "${1} >&2
}
# -------------------------------------------------------------------------
# legt ein Verzeichnis an
# Parameter1 - Verzeichnis, welches angelegt werden soll
legeVerzeichnisAn() {
# Anzahl der Parameter ueberpruefen
if [ ${#} -eq 1 ]
then
DateiDir=${1}
mkdir -p ${DateiDir} 2> /dev/null
if [ ${?} -ne 0 ]
then
Abbruch "Kann Verzeichnis '${DateiDir}' nicht anlegen! -> Ende" 100
fi
else
Abbruch "legeVerzeichnisAn() - Anzahl der Parameter stimmen nicht!" 151
fi
}
# -------------------------------------------------------------------------
# legt eine Datei an
# Parameter - Datei, die angelegt werden soll
legeDateiAn() {
# Anzahl der Parameter ueberpruefen
if [ ${#} -eq 1 ]
then
AnlegeDatei=${1}
# testen, ob Config-File bereits vorhanden ist
if [ ! -f ${AnlegeDatei} ]
then
# Config-File ist nicht vorhanden
DateiDir=$(dirname ${AnlegeDatei})
legeVerzeichnisAn ${DateiDir}
fi
touch ${AnlegeDatei} 2> /dev/null
if [ ${?} -ne 0 ]
then
Abbruch "Kann Datei '${AnlegeDatei}' nicht anlegen! -> Ende" 101
fi
else
Abbruch "legeDateiAn() - Anzahl der Parameter stimmen nicht!" 152
fi
}
# -------------------------------------------------------------------------
# laedt einen Eintrag aus der Config-Datei
# Parameter1 - Wert der geladen werdne soll
# HINWEIS: wird ein Parameter mehrfach in der Config-Datei gefunden, wird nur der letzte-Eintrag ausgewertet
ladeConfig() {
# Anzahl der Parameter ueberpruefen
if [ ${#} -eq 1 ]
then
ReadWert=${1}
# Standard-Werte, die im Config-File geaendert werden koennen
# HINWEIS: NICHT hier anpassen!!
ParamStart="BASISURL=http://www.gesetze-im-internet.de
STARTSEITE=aktuell.html
DOWNLOADDIR=${HOME}/Gesetze
KATALOG=${HOME}/.gesetze/Katalog.csv
"
legeDateiAn ${CONFIGFILE}
# Versuch den angeforderten Parameter zu lesen
FundStelle=$(grep "^[[:space:]]*${ReadWert}=.*$" ${CONFIGFILE})
if [ ${?} -eq 0 ]
then
# min 1x gefunden -> noch einmal lesen und zerlegen
FundStelle=$(grep "^[[:space:]]*${ReadWert}=.*$" ${CONFIGFILE} | \
tail -n 1 | \
sed 's|^[[:space:]]*'${ReadWert}'=||g')
else
# Standard-Wert schreiben
for ParamLauf in ${ParamStart}
do
Parameter=${ParamLauf%%=*}
ParameterWert=${ParamLauf##*=}
if [ ${Parameter} = ${ReadWert} ]
then
echo "${Parameter}=${ParameterWert}" >> ${CONFIGFILE}
FundStelle=${ParameterWert}
fi
done
fi
# gefundenen (oder Standard-Parameter) ausgeben
echo ${FundStelle}
else
Abbruch "ladeConfig() - Anzahl der Parameter stimmen nicht!" 152
fi
}
# -------------------------------------------------------------------------
# schreibt einen Eintrag in die Config-Datei
# Parameter1 - Name des Eintrags
# Parameter2 - Wert des Eintrags
schreibeConfig() {
# Anzahl der Parameter ueberpruefen
if [ ${#} -eq 2 ]
then
ParamName=${1}
ParamWert=${2}
FundStelle=$(grep "^[[:space:]]*${ParamName=}=.*$" ${CONFIGFILE})
if [ ${?} -eq 0 ]
then
sed -i 's|^[[:space:]]*'${ParamName=}'=.*$|'${ParamName}'='${ParamWert}'|g' ${CONFIGFILE}
else
echo "${ParamStart[${lauf}]}=${ParamStart[${mehr}]}" >> ${CONFIGFILE}
fi
else
Abbruch "schreibeConfig() - Anzahl der Parameter stimmen nicht!" 154
fi
}
# -------------------------------------------------------------------------
# fragt den Speicherort fuer die Gesetze ab
SpeicherortAbfragen() {
LOG1 "\nBitte geben Sie das Verzeichnis ein, in dem die Gesetze gespeichert werden sollen."
read -p "Zielverzeichnis: " DownloadVerzeichnis
legeVerzeichnisAn ${DownloadVerzeichnis}
schreibeConfig DOWNLOADDIR ${DownloadVerzeichnis}
}
# -------------------------------------------------------------------------
# gibt den Stand eienr Datei aus
# Return - Stand der Datei
StandDatei() {
inDatei=${1}
LANG=C stat ${inDatei} | awk -F "[ .-]" '/Change/ { print $4"."$3"."$2", "$5; }'
}
# -------------------------------------------------------------------------
# gibt die Anzahl der Gesetze in der Katalog-Datei aus
# Return - Anzahl der Gesetze
AnzahlGesetzeInKatalog() {
wc -l < ${KATALOG}
}
# -------------------------------------------------------------------------
# ermittelt die lokal vorhandenen Gesetze
# Return - Liste mit Gesetzen
# HINWEIS1: es werden nur Gesetzt ermittelt, die auch im KATALOG vorhanden sind
# HINWEIS2: Gross-/Kleinschreibung der Dateinamen wird beruecksichtigt
vorhandeneGesetze() {
# init
Liste=""
# alle gefundenen PDF-Datei durchlaufen
for GesetzLauf in $(find ${DOWNLOADDIR} -maxdepth 1 -type f -iname "*pdf" | sort)
do
# %% - Suffix abschneiden
# basename - Pfad entfernen
KurzGesetzname=/$(basename ${GesetzLauf%%\.pdf})/
# im Katalog nachschlagen, ob Gesetzt dort vorhanden ist
grep -q ${KurzGesetzname} ${KATALOG}
if [ ${?} -eq 0 ]
then
# nur in Liste aufnehmen, wenn Gesetz auch im Katalog vorhanden ist; andere PDFs ignorieren
Liste="${Liste} ${KurzGesetzname}"
fi
done
# Liste ausgeben
echo ${Liste}
}
# -------------------------------------------------------------------------
# ermittelt die Anzahl der lokal vorhandene Gesetze
# Return - Anzahl der Gesetze
AnzahlGesetzeInDir() {
Anzahl=0
for Lauf in $(vorhandeneGesetze)
do
Anzahl=$(echo ${Anzahl} + 1 | bc)
done
echo ${Anzahl}
}
# -------------------------------------------------------------------------
# zeigt das Hauptmenue an
MainMenu() {
clear
cat << ENDE
********************************************************************************
Gesetzestexte
(Quelle: ${BASISURL})
--------------------------------------------------------------------------------
(K)atalogdatei aktualisieren (Stand: $(StandDatei ${KATALOG}))
(Z)ielverzeichnis aendern (aktuell: ${DOWNLOADDIR})
(e)in bestimmtes Gesetz als PDF herunterladen
(a)lle Gesetze als PDF herunterladen (Anzahl: $(AnzahlGesetzeInKatalog))
UEber(s)icht vorhandener Gesetze
(b)estehende Gesetze aktualisieren (gefunden: $(AnzahlGesetzeInDir))
Quell(t)ext anzeigen
ENDE
********************************************************************************
ENDE
}
# -------------------------------------------------------------------------
# laedt ein Gesetzt ins Zielverzeichnis herunter
# Parameter1: Zeile, so wie sie in KATALOG steht
ladeGesetz() {
# Anzahl der Parameter ueberpruefen
if [ ${#} -eq 1 ]
then
ZeileAusKatalog=${1}
# Zielverzeichnis anlegen
legeVerzeichnisAn ${DOWNLOADDIR}
# von Trefferzeile den 1. Teil (vor ;) rausschneiden --> Langname
GesetzName=${ZeileAusKatalog%%;*}
# von Trefferzeile den 2. Teil (nach ;) rausschneiden --> URL
GesetzURL=${ZeileAusKatalog##*;}
# aus URL den Kurzname vom Gesetz ermitteln (Aufbau ../bundesrecht/<Kurzname>/gesamt.pdf)
KurzName=$(echo ${GesetzURL} | awk -F [\/] ' // { print $3; } ')
# passendes Gesetz herunterladen
# in das gewählte Verzeichnis verschieben
LOG1 "- Lade '${GesetzName}' als '${KurzName}.pdf' herunter..."
wget -cq -O ${DOWNLOADDIR}/${KurzName}.pdf "${BASISURL}/${GesetzURL}"
LOG2 "Gesetz wurde im Verzeichnis '${DOWNLOADDIR}' abelegt."
else
Abbruch "ladeGesetz() - Anzahl der Parameter stimmen nicht!" 155
fi
}
# -------------------------------------------------------------------------
# fragt beim Benutzer nach, welches Gesetzt heruntergeladen werden soll - und tut dies dann
ladeGesetzAuswahl() {
# Gesetzname abfragen
# aufpassen mit deutschen Umlauten, dass kann Probleme geben!!!
read -p "Bitte Gesetz eingeben (auch Teilzeichenketten oder Abkuerzungen): " GESETZ
# alle passende Gesetze anzeigen und Zeilen nummerieren
# grep - passende Zeilen suchen
# sed - nur Name anzeigen, URL verschweigen
# nl - Zeilen nummerieren
grep -i ${GESETZ} ${KATALOG} | sed "s|^\(.*\);.*$|\1|" | nl
read -p "Bitte Nummer eingeben: " NUMMER
# gewuenschte Zeile ermitteln
# grep - Zeile suchen
# head - Block mit gewuenschten Zeilen heraustrennen
# tail - letzte Zeile ist die eingegebenen
GESETZGESAMT=$(grep -i ${GESETZ} ${KATALOG} | head -n ${NUMMER} | tail -n 1)
ladeGesetz "${GESETZGESAMT}"
}
# -------------------------------------------------------------------------
# laedt alle Gesetze aus dem Katalog herunter
ladeGesetzAlle() {
GesamtAnzahl=$(AnzahlGesetzeInKatalog)
AktGesetz=0
while read KatalogZeile
do
AktGesetz=$(echo ${AktGesetz} + 1 | bc)
LOG1 "*** bearbeite ${AktGesetz}/${GesamtAnzahl}..."
ladeGesetz "${KatalogZeile}"
done < ${KATALOG}
}
# -------------------------------------------------------------------------
# wartet auf die Eingabe des Benutzers
warten() {
read -p "Zum Fortsetzen <Enter> druecken... " TMPVAR
}
# -------------------------------------------------------------------------
# aktualisiert alle vorhandenen Gesetze
aktualisiereGesetze() {
LOG1 "\nVorhandene Gesetze werden nur neu herunter geladen, wenn sich diese auch auf dem Server geaendert haben!\n"
for Lauf in $(vorhandeneGesetze)
do
GesetzZeile=$(grep ${Lauf} ${KATALOG} | head -n 1)
ladeGesetz "${GesetzZeile}"
done
}
# -------------------------------------------------------------------------
# zeigt den Status aller (bekannten) Gesetze an
zeigeGesetzStatus() {
for Lauf in $(vorhandeneGesetze)
do
GesetzZeile=$(grep ${Lauf} ${KATALOG} | head -n 1)
# von Trefferzeile den 1. Teil (vor ;) rausschneiden --> Langname
GesetzName=${GesetzZeile%%;*}
# von Trefferzeile den 2. Teil (nach ;) rausschneiden --> URL
GesetzURL=${GesetzZeile##*;}
# aus URL den Kurzname vom Gesetz ermitteln (Aufbau ../bundesrecht/<Kurzname>/gesamt.pdf)
KurzName=$(echo ${GesetzURL} | awk -F [\/] ' // { print $3; } ').pdf
LOG1 "$(StandDatei ${DOWNLOADDIR}/${KurzName}) - ${GesetzName} (${KurzName})"
done
}
# -------------------------------------------------------------------------
# aktualisiert den Katalog mit Gesetzen
KatalogAktualisieren() {
legeDateiAn ${KATALOG}
# alle Unterseiten mit Gesetzen herunterladen
# wget - Hauptseite laden
# sed - alle " in <NewLine> wandeln
# grep - nur Zeilen mit "teilliste..." weiter verarbeiten
# while - alle Zeilen vom grep weiter bearbeiten
# wget - Unterseiten herunter laden
# iconv - konvertieren, damit deutsche Umlaute richtig angezeigt werden
# set - unnuetzen Text entfernen
# awk - Zeile mit "gesamt.pdf" heraussuchen - nur Titel und Teilurl ausgeben
# sort - sortieren und doppelte Zeilen entfernen
# > - in Datei speichern
LOG1 "- aktualisiere den Katalog mit verfuegbaren Gesetzen..."
wget -c ${BASISURL}/${STARTSEITE} -q -O - | \
sed "s|\"|\n|g" | \
grep -i "teilliste_[a-z0-9]\." | \
while read SEITE
do
LOG2 "-- verarbeite Unterseite '${SEITE}'..."
wget -cq -O - ${BASISURL}/${SEITE}| \
iconv -f iso-8859-1 -t utf-8 | \
sed "s| ||g" | \
awk -F [\<\"] '/gesamt\.pdf/ { print $1";"$3; } '
done | \
sort -u \
> ${KATALOG}
}
# -------------------------------------------------------------------------
# ----- MAIN --------------------------------------------------------------
# -------------------------------------------------------------------------
# testen, ob "DEBUG-Modus"
VERBOSE=0
if [ ${#} -gt 0 ]
then
if [ ${1} = "-v" -o ${1} = "-V" ]
then
VERBOSE=1
fi
fi
# erst einmal Parameter laden
BASISURL=$(ladeConfig BASISURL)
STARTSEITE=$(ladeConfig STARTSEITE)
KATALOG=$(ladeConfig KATALOG)
DOWNLOADDIR=$(ladeConfig DOWNLOADDIR)
# Download-Verzeichnis anlegen
legeVerzeichnisAn ${DOWNLOADDIR}
# testen, ob Katalog leer (-s - Datei und Groesse 0), wenn ja -> Download
[ ! -s ${KATALOG} ] && KatalogAktualisieren
# Hauptprogrammschleife
ENDE=0
while [ ${ENDE} -eq 0 ]
do
MainMenu
read -p "Bitte wählen Sie den gewünschten Punkt: " Auswahl
case ${Auswahl} in
K|k) # Katalog aktualisieren
KatalogAktualisieren
;;
Z|z) # Speicherort abfragen
SpeicherortAbfragen
DOWNLOADDIR=$(ladeConfig DOWNLOADDIR)
;;
E|e) # bestimmtes Gesetz herunter laden
ladeGesetzAuswahl
warten
;;
A|a) # alle Gesetze herunter laden
ladeGesetzAlle
;;
S|s) # UEbersicht vorhandener Gesetze
zeigeGesetzStatus
warten
;;
B|b) # bestehende Gesetze aktualisieren
aktualisiereGesetze
warten
;;
T|t) # Quelltext anzeigen
# HINWEIS: hier ein grafisches Programm aufzurufen ist gewfaehrlich, da dies
# bei SSH-Verbindungen Probleme macht
LOG1 "\nZum Beenden der Quelltextanzeige 'q' druecken."
warten
nl "${0}" | less
;;
*) ENDE=1
LOG1 "\nDanke und auf Wiedersehen!\n"
;;
esac
done
exit 0
|
Gruß Norman
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hi, NoKurth schrieb:
Kann es sein, dass du in der ersten Zeile "bash" gegen "dash" getauscht hast? Was gibt denn
| readlink -f $(which bash)
|
bei dir aus? Sollte das Ergebnis nicht "/bin/bash" lauten, kann es so nicht funktionieren.
genau hier war der Fehler ☺ Danke! Ist echt super geworden! Was ich echt genial finde, ist die Lösung mit dem lokalen Speichern der tmp-Dateien. Genial! Gruß -Jeanbarth
|
NoKurth
Anmeldungsdatum: 18. August 2006
Beiträge: 430
|
Hallo Jeanbarth. Jeanbarth schrieb: [...]
genau hier war der Fehler ☺
[...]
Welche Version hast du im Einsatz/getestet? Die Version für die Bash (Geht die jetzt? - Post vom 29.07.2011, 11:42) oder die Version für die Dash (Post vom 29.07.2011, 13:28). Wenn bei dir die Bash-Version jetzt geht, würde ich gerne die Dash-Version verwerfen. Hintergrund: In der Bash-Version ist die Eingabe des Zielpfads komfortabler, da gleich etwas voreingestellt ist, was editiert werden kann. Bei der Dash-Version muss der Pfad immer komplett eingegeben werden. Jeanbarth schrieb: [...]
Was ich echt genial finde, ist die Lösung mit dem lokalen Speichern der tmp-Dateien.
[...]
Stand doch auf der ToDo-Liste... 😉 Gruß
Norman
|
Jeanbarth
(Themenstarter)
Anmeldungsdatum: 19. April 2011
Beiträge: 205
|
Hi Norman, NoKurth schrieb:
Welche Version hast du im Einsatz/getestet? Die Version für die Bash (Geht die jetzt? - Post vom 29.07.2011, 11:42) oder die Version für die Dash (Post vom 29.07.2011, 13:28). Wenn bei dir die Bash-Version jetzt geht, würde ich gerne die Dash-Version verwerfen. Hintergrund: In der Bash-Version ist die Eingabe des Zielpfads komfortabler, da gleich etwas voreingestellt ist, was editiert werden kann. Bei der Dash-Version muss der Pfad immer komplett eingegeben werden.
die Bash-Version geht! Dann verwerfe ruhig die Dash-Version ☺ Hab mir die noch offenen To-Do's angeschaut, nur kann ich da leider nicht mehr weiter helfen. Wie gesagt, die Idee und die Umsetzung war mein erster Versuch - überhaupt. Nochmal nen Dank an Dich, deine Umsetzung ist echt super 👍 Gruß -Jeanbarth
|
emka70
Anmeldungsdatum: 31. Oktober 2010
Beiträge: 104
Wohnort: Wiesbaden
|
Jeanbarth schrieb: Hallo Zusammen, habe aus beruflichen Gründen ein kleines Skript geschrieben. Muss gestehen, es ist mein Erstes!
Hoffe es hilft hier auch jemanden und/ oder ich bekomme Verbesserungsvorschläge.
Wie bereits gesagt, es ist mein erster Versuch. So, zum Skript. Das Skript lädt die Gesetzestexte von www.gesetze-im-internet.de herunter und speichert diese als .pdf.
Weiter kann man die bereits heruntergeladenen Gesetzestexte updaten.
Auch kann man nur ein bestimmtes Gesetz herunterladen. Dazu muss man lediglich die Abkürzung des Gesetzes kennen (Bürgerliches Gesetzbuch = bgb).
Hallo Jeanbarth, ich habe beruflich auch mit dieser Website zu tun. Leider habe ich Dein Skript erst jetzt gesehen. Wir pflegen eine Datenbank die Deeplinks zu dieser Webseite enthält. Haben vor einigen Jahren ein SAS-Code (Schlüsselbrücke) für das Deeplinking geschrieben (Gesetzes-Langtexte → DB-Abkürzungen → Deeplink). Gesetz-im-Internet.de ist ein Auszug aus der sog. JURIS-Datenbank und enthält alle aktuellen Gesetze, nicht aber generell die außer Kraft getretenen. Hier gibt es allerdings auch Ausnahmen, wir verlinken z.B. auch auf alte Gesetze, die dort abgelegt sind, aber nicht mehr "offiziell" zu erreichen sind. Wir wollten damals eine offizielle Deeplinking-Datei (also von Gesetzeskürzel auf Deeplink) vom BMJ und von JURIS haben. Wir haben nie eine Reaktion erhalten, aber im BMJ dann nachgefragt. Lt. BMJ kann jeder diese Daten verwenden, also haben wir im Projekt eine Schlüsselbrücke selbst programmiert. Werde mal unsere Programmierer fragen und eventuell unseren Code als Skript übersetzen. Schön wäre es z.B. am Ende eine Anwendung zu haben, die einem aus einer Volltextsuche das entsprechende Gesetz herunterlädt. 😉 Werde mich mal melden. Viele Grüße
|
clocker
Anmeldungsdatum: 25. August 2006
Beiträge: 371
Wohnort: ::1
|
Hallo ja das hört sich doch gut an, ich hoffe das wird was 👍 Gruss
|