sascha@3657: FLYS3-Importer
sascha@3657: 
sascha@3657: Der FLYS3-Importer dient dazu, hydrologische und morphologische
sascha@3657: Gewässerdaten aus dem Dateisystem in die FLYS3-Datenbank zu importieren.
sascha@3657: Das Werkzeug orientiert sich hierbei an der Dateihierachie,
sascha@3657: so wie sie auch von Desktop-FLYS ausgelesen wird.
sascha@3657: 
sascha@3657: Als Startargument bekommt der Importer den Pfad zu einer
sascha@3657: GEW-Datei übergeben. 
sascha@3657: 
sascha@3657: Wichtig für den Importer sind in dieser Datei
sascha@3657: die Zeilen, die mit "WSTDatei:" beginnen. In ihnen wird der 
sascha@3657: Pfad zu der zentralen WST-Datei des jeweiligen Gewässers angegeben.
sascha@3657: Alle anderen importierten Dateien werden in ihrer Lage relativ zur 
sascha@3657: Lage dieser Datei betrachtet.
sascha@3657: 
sascha@3657: Das Verhalten des Importes kann mit sogenannten
sascha@3657: System-Properties gesteuert werden. Diese werden im
sascha@3657: Allgemeinen in der Form -Dkey=value angegeben.
sascha@3657: 
felix@5029: Will man z.B. mit dem Importer nur einen simulierten Import
felix@5029: durchführen (also nicht in die Datenbank geschrieben werden),
felix@5029: dann kann dies über die Angabe von
sascha@3657: '-Dflys.backend.importer.dry.run=true' erfolgen.
sascha@3657: 
sascha@3657: !!! Der Import geht wie Desktop-FLYS davon aus, dass die Dateien
sascha@3657: !!! Latin-1 encodiert vorliegen.
sascha@3657: 
sascha@3657: Für den Importer stellt jeweils der Import eines Gewässers eine
sascha@3657: transaktionale Einheit dar. Wird der Import während eines Gewässers
sascha@3657: abgebrochen, werden alle Änderungen bzgl. dieses Gewässers zurück gerollt.
sascha@3657: 
sascha@3657: Importierte Daten:
sascha@3657: 
sascha@3657: Der Importer importiert folgende Datentypen:
sascha@3657: 
sascha@3657: - Streckenfavoriten (*.km-Dateien)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.annotations=true'
sascha@3657:   unterdrückt werden.
sascha@3657: 
sascha@3664:   Zur Klassifikation von Streckenfavoriten kann mit
sascha@3664:   -Dflys.backend.importer.annotation.types=DATEI
sascha@3664:   der Pfad zu einer XML-Datei angegeben werden, in der über
sascha@3664:   Regeln festgelegt wird, wie diese geschehen soll.
sascha@3664:   Details hierzu im Anhang 'Klassifikation von Streckenfavoriten'.
sascha@3657: 
sascha@3657: - Pegel, Stammdaten (*.glt, *.sta-Dateien):
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.gauges=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Die .glt-Datei, die neben der .wst-Datei liegt, wird zuerst
sascha@3665:   ausgelesen. Es werden nur *.sta-Datei von Pegeln geladen, die
sascha@3665:   in der .glt-Datei vermerkt sind.
sascha@3657: 
sascha@3660:   Wenn "-Dflys.backend.sta.parse.gauge.numbers=true' wird versucht,
sascha@3660:   die offiziellen Pegelnummern aus den Stammdaten zu extrahieren.
sascha@3660:   !!! Dies ist mit Vorsicht zu behandeln, denn die meisten STA-Dateien
sascha@3660:   !!! Enthalten invalide Pegelnummern.
sascha@3660: 
sascha@3660:   Die System-Property "flys.backend.main.value.types" kann einen
sascha@3662:   String mit gültigen Typen von Stammdaten enthalten. Vorbelegt
sascha@3660:   ist "QWTD". In der Praxis ist "QWD" eine sinnvolle Belegung.
sascha@3660: 
sascha@3657: - Basis-Wasserstände (gewaesser.wst-Dateien):
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.wst=true'
sascha@3657:   unterdrückt werden.
sascha@3657: 
sascha@3657: - Zusätzliche Längsschnitte (*.zus, *.wst-Dateien)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.extra.wsts=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis
sascha@3665:   "../Zus.Längsschnitte" relativ zur gewaesser.wst-Datei betrachtet.
sascha@3657: 
sascha@3657: - Fixierungen (*.wst-Dateien)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.fixations=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Es werden die *.wst-Dateien aus dem Verzeichnis
sascha@3665:   "../Fixierungen" relativ zur gewaesser.wst-Datei betrachtet.
sascha@3657: 
sascha@3657: - Amtliche Linien (*.wst-Dateien)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.official.lines=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Es werden die "Amtl_Linien.wst"-Dateien aus dem Verzeichnis
sascha@3665:   "../Basisdaten" und "../Fixierungen" relativ zur gewaesser.wst-Datei betrachtet.
sascha@3657: 
sascha@3657: - Profilspuren (*.prf-Dateien)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.prfs=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Es werden rekursiv alle *.prf-Dateien aus "../../.." relativ
sascha@3665:   zur gewaesser.wst-Datei betrachtet. Vor dem Import werden
sascha@3665:   mithilfe eines Längen- und eines MD5-Summen-Vergleichs
sascha@3665:   inhaltliche Duplikate ausgeschlossen.
sascha@3657: 
sascha@3657: - Hydraulische Kennzahlen (*.hyk)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.hyks=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Es werden rekursiv alle *.hyk-Dateien aus "../../.." relativ
sascha@3665:   zur gewaesser.wst-Datei betrachtet. Vor dem Import werden
sascha@3665:   mithilfe eines Längen- und eines MD5-Summen-Vergleichs
sascha@3665:   inhaltliche Duplikate ausgeschlossen.
sascha@3657: 
sascha@3665: - Hochwassermarken (*.zus, *.wst)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.flood.water=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis
sascha@3665:   "../HW-Marken" relativ zur gewaesser.wst-Datei betrachtet.
sascha@3657: 
sascha@3657: - Hochwasserschutzanlagen (*.zus)
sascha@3657:   Der Import kann mit '-Dflys.backend.importer.skip.flood.protection=true'
sascha@3657:   unterdrückt werden.
sascha@3665:   Es werden die *.zus- und *.wst-Dateien aus dem Verzeichnis
sascha@3665:   "../HW-Schutzanlagen" relativ zur gewaesser.wst-Datei betrachtet.
sascha@3657: 
sascha@3657:   TODO INGO:
sascha@3657: 
sascha@3657:   flys.backend.importer.skip.bed.height.single
sascha@3657:   flys.backend.importer.skip.bed.height.epoch
sascha@3657:   flys.backend.importer.skip.sediment.density
sascha@3657:   flys.backend.importer.skip.morphological.width
sascha@3657:   flys.backend.importer.skip.flow.velocity
sascha@3657:   flys.backend.importer.skip.sediment.yield
sascha@3657:   flys.backend.importer.skip.waterlevels
sascha@3657:   flys.backend.importer.skip.waterlevel.differences
sascha@3657:   flys.backend.importer.skip.sq.relation
sascha@3657: 
sascha@3663: Für die Verbindung zur Datenbank ist es nötig, dem Import
sascha@3663: die Verbindungsdaten zu übergeben. Dies geschieht ebenfalls
sascha@3663: über System-Properties:
sascha@3657: 
sascha@3663:   -Dflys.backend.user=NUTZER
sascha@3663:    Datenbanknutzer
sascha@3663: 
sascha@3663:   -Dflys.backend.password=PASSWORT
sascha@3663:    Datenbankpasswort
sascha@3663: 
sascha@3663:   -Dflys.backend.url=URL
sascha@3663:    URL zur Datenbank. Typische wäre im Fall einer Oracle-XE-Edition z.B.:
sascha@3663:    jdbc:oracle:thin:@//RECHNER:PORT/XE
sascha@3663:    mit RECHNER Name des Servers, auf dem die Datenbank läuft
sascha@3663:    und PORT der Port auf dem die Datenbank konkret zu erreichen ist.
sascha@3663:    Weitere Details unter http://www.orafaq.com/wiki/JDBC
sascha@3663: 
sascha@3663:  -Dflys.backend.driver=TREIBER
sascha@3663:   mit TREIBER dem Namen des JDBC-Treibers, der es erlaubt
sascha@3663:   das Protokoll der Datenbank zu sprechen. Im Falle
sascha@3663:   einer Oracle XE wäre dies z.B.:
sascha@3663:   oracle.jdbc.OracleDriver
sascha@3663: 
sascha@3663:  -Dflys.backend.dialect=DIALECT
sascha@3663:   mit DIALECT dem Hibernate-Dialekt, den die Datenbank versteht.
sascha@3663:   Im Falle eine Oracle-XE wäre dies z.B.:
sascha@3663:   org.hibernate.dialect.OracleDialect
sascha@3663: 
sascha@3663: 
sascha@3663: Hinweise zum Betrieb:
sascha@3663: ---------------------
sascha@3662: 
sascha@3662:     Der Speicherverbrauch des Importers ist sehr hoch. Es ist empfehlenswert,
sascha@3662:     der JVM mindestens 8GiB Hauptspeicher zuzuordnen: '-Xmx8192m'
sascha@3662:     Besonders speicherintensiv ist der Import der HYKs und der PRFs.
sascha@3662:     Hier ist es unter Umständen empfehlenswert, diese in zwei oder drei
sascha@3662:     Schritten zu importieren. Zuerst die sonstigen hydrologischen Daten
sascha@3662:     (hierbei mit flys.backend.importer.skip.hyks=true und flys.backend.importer.skip.prfs
sascha@3662:     den Import der HYKs und PRFs verhindern). Dann die HYKs (mit flys.backend.importer.skip.*
sascha@3662:     der anderen Daten) und im finalen Schritt dann die PRFs.
sascha@3662: 
sascha@3664: Anhang 'Klassifikation von Streckenfavoriten'
sascha@3664: ---------------------------------------------
sascha@3664: Streckenfavoriten werden aus KM-Dateien importiert. Um die einzelnen Einträge
sascha@3664: eine Kategorie (Brücken, Pegel, etc.) zuzuordnen, kann eine XML angegeben werden,
sascha@3664: in der Regeln für diese Klassifikation definiert werden. Schematisch gliedert
sascha@3664: sich diese Datei in die zwei Bereiche 'types' und 'patterns':
sascha@3664: 
sascha@3664: <annotation>
sascha@3664:     <types> ...  </types>
sascha@3664:     <patterns> ...  </patterns>
sascha@3664: </annotation>
sascha@3664: 
sascha@3664: In der Sektion 'types' werden die Kategorien vereinbart, in die
sascha@3664: klassifiziert werden sollen. Die geschieht mit einzelnen
sascha@3664: 
sascha@3664:   <type name="Pegel"/>
sascha@3664:   <type name="Brücke"/>
sascha@3664:   ...
sascha@3664:   <type name="Sonstige" default="true"/>
sascha@3664: 
sascha@3664: Das Attribut 'default' kann einmal vergeben werden und
sascha@3664: besagt, dass diese Kategorie gewählt werden soll, wenn
sascha@3664: keine andere Kategorie zugeordnet werden kann.
sascha@3664: 
sascha@3664: In der Sektion 'patterns' werden dann die Regel
sascha@3664: definiert, die einzelne Einträge den definierten Kategorien
sascha@3664: zuordnet. Hierfür können zwei Arten von Definitionen
sascha@3664: angegeben werden:
sascha@3664: 
sascha@3664:   <file pattern="^Brücken$" type="Brücke"/>
sascha@3664: 
sascha@3664: oder
sascha@3664: 
sascha@3664:   <line pattern="^Brücke[:\s].*$" type="Brücke"/>
sascha@3664: 
sascha@3664: Die erste Variante bestimmt die Kategorie, die pro KM-Datei
sascha@3664: gelten soll. 'pattern' ist hierbei ein regulärer Ausdruck,
sascha@3664: der auf den Dateinamen angewandt wird. Passt der Name
sascha@3664: der Datei auf den regulären Ausdruck, wird 'type' als
sascha@3664: Vorgabe angenommen. Treffen mehrere <file>-Regeln zu,
sascha@3664: wird der erste Treffer angewandt. Findet keine der <file>-Regeln
sascha@3664: Anwendung, wird die Kategorie ausgewählt, die in der <types>-Section
sascha@3664: das Attribut 'default' gesetzt hat.
sascha@3664: 
sascha@3664: Die zweite Regel-Variante <line> wird auf jeden Eintrag
sascha@3664: innerhalb einer KM-Datei auf den Bezeichner der Streckenfavoriten
sascha@3664: angewandt. Als Muster dient auch hier ein regulärer Ausdruck,
sascha@3664: der über das Attribut 'pattern' definiert wird. Die Kategorie
sascha@3664: wird in Trefferfall über das Attribut 'type' bestimmt. Treffen
sascha@3664: mehrere Regeln zu, wird die Kategorie gewählt, die zum ersten
sascha@3664: Treffer gehört. Trifft keine Regel zu wird der Eintrag der
sascha@3664: Kategorie zugeteilt, die für die beinhaltende Datei als Vorgabe
sascha@3664: gilt.
sascha@3664: 
sascha@3664: Anhang 'Fehler und Warnungen':
sascha@3664: =============================
sascha@3657: 
sascha@3660: Fehler:
sascha@3660: -------
sascha@3659: 
sascha@3659: - 'error while parsing gew'
sascha@3659:   Die GEW-Datei ist fehlerhaft oder konnte nicht geöffnet werden.
sascha@3659: 
sascha@3659: - 'File 'XYZ' is broken!'
sascha@3659:   Die Datei XYZ ist inkonsistent und führt zu Fehlern.
sascha@3659: 
sascha@3659: - 'Error while parsing file for morph. width.'
sascha@3659:   Beim Lesen der morphologischen Breite trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'Error while storing flow velocity model.'
sascha@3659:   Beim Schreiben eines Fliessgeschwindigkeitsmodells trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'Error while storing flow velocity measurement.'
sascha@3659:   Beim Schreiben einer Fliessgeschwindigkeitsmessung trat ein Fehler auf. 
sascha@3659: 
sascha@3659: - 'Error while storing sediment yield.'
sascha@3659:   Beim Schreiben einer Sedimentablagerung trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'Error while storing waterlevel diff.'
sascha@3659:   Beim Schreiben einer Wassspiegeldifferenz trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'Error while storing sq relation.'
sascha@3659:   Beim Schreiben einer S(Q) Beziehung trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'Error reading PRF file.'
sascha@3659:   Beim Lesen einer PRF-Datei trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'Error closing PRF file.'
sascha@3659:   Beim Schliessen einer PRF-Datei trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'HYK 1: not enough elements in line #'
sascha@3659: - 'HYK 2: not enough elements in line #'
sascha@3659: - 'HYK 5: not enough elements in line #'
sascha@3659: - 'HYK 6: not enough elements in line #'
sascha@3659:   Eine Zeile in einer HYK-Datei hat nicht genügend Elemente.
sascha@3659: 
sascha@3659: - 'HYK: parsing num zones, bottom or top height failed in line #'
sascha@3659: - 'HYK: HYK: number of flow zones mismatches in line #'
sascha@3659:   Die Anzahl der Zonen oder Daten über die Zonen sind nicht korrekt.
sascha@3659: 
sascha@3659: - 'HYK: cannot parse number in line #'
sascha@3659:   Eine Zahl wurde erwartet.
sascha@3659: 
sascha@3659: - 'HYK: Error reading file.'
sascha@3659:   Beim Lesen einer HYK-Datei trat ein Fehler auf.
sascha@3659: 
sascha@3659: - 'HYK: Error closing file.'
sascha@3659:   Beim Schliessen einer HYK-Datei trat ein Fehler auf.
sascha@3659: 
sascha@3660: Warnungen:
sascha@3660: ----------
sascha@3659: 
sascha@3660: - 'annotation type file 'XYZ' is not readable.'
sascha@3660:   Die Datein XYZ kann nicht gelesen werden.
sascha@3659: 
sascha@3660: - 'cannot parse annotation types file.'
sascha@3660:   Während der Verarbeitung der Annotationsdatei ist Fehler aufgetreten.
sascha@3660: 
sascha@3660: - 'Cannot read directory.'
sascha@3660:   verzeichnis konnte nicht gelesen werden.
sascha@3660: 
sascha@3660: - 'no official lines wst file found'
sascha@3660:   Keine Datei mit amtlichen Linien gefunden.
sascha@3660: 
sascha@3660: - 'cannot read fixations wst file directory'
sascha@3660:   Das Verzeichnis mit den Fixierungen kann nicht gelesen werden.
sascha@3660: 
sascha@3660: - 'cannot read extra longitudinal wst file directory'
sascha@3660:   Das Verzeichnis mit den zusätzlichen Längsschnitten kann nicht gelesen werden.
sascha@3660: 
sascha@3660: - 'cannot read gauges from 'XYZ''
sascha@3660:   Die Pegelgültigkeiten können nicht gelesen werden.
sascha@3660: 
sascha@3660: - 'HYK file 'XYZ' seems to be a duplicate.'
sascha@3660:   Die HYK-Datei wurde unter anderem Namen aber gleichen Inhalts
sascha@3660:   bereits gefunden.
sascha@3660: 
sascha@3660: - 'PRF file 'XYZ' seems to be a duplicate.'
sascha@3660:   Die PRF-Datei wurde unter anderem Namen aber gleichen Inhalts
sascha@3660:   bereits gefunden.
sascha@3660: 
sascha@3660: - 'Skip invalid SedimentYield: time interval or unit null!'
sascha@3660:   Eine Sedimentablagerung ist ungültig und wurde ausgelassen.
sascha@3660: 
sascha@3660: - 'skip flow velocity model: No discharge zone specified.'
sascha@3660:   Da kein Abflussbereich angegeben wurde, wurde das Fliessgeschwindigkeitsmodell ausgelassen.
sascha@3660: 
sascha@3660: - 'skip invalid waterlevel - no unit set!'
sascha@3660:   Ein einheitenloser Wasserstand wurde ausgelassen.
sascha@3660: 
sascha@3660: - 'Cannot parse time range.'
sascha@3660:   Das Zeitformat wurde nicht erkannt.
sascha@3660: 
sascha@3660: - 'skip invalid data line #'
sascha@3660:   Ungültige Datenzeile wurde ausgelassen.
sascha@3660: 
sascha@3660: - 'Error while parsing sq relation row #'
sascha@3660:   Eine Zeile in der S(Q)-Beziehung ist ungültig.
sascha@3660: 
sascha@3660: - 'GLT: no gauge found in line #'
sascha@3660:   In der GLT-Datei wurde ein Pegel erwartet, aber nicht gefunden.
sascha@3660: 
sascha@3660: - 'GLT: line # has not enough columns.'
sascha@3660:   Eine Zeile in der Pegelgültigkeitsdatei hat nicht genug spalten.
sascha@3660: 
sascha@3660: - 'Error while parsing flow velocity values.'
sascha@3660: - 'skip invalid data line: #'
sascha@3660:   Invalide Datenzeile in einer Datei mit einer Fliessgeschwindigkeitsmessung.
sascha@3660: 
sascha@3660: - 'skip invalid waterlevel line: #'
sascha@3660: - 'Error while parsing value: #'
sascha@3660: - 'Error while parsing station: #'
sascha@3660:   Invalide Datenzeile in einer Datei mit Wasserstandsdifferenzen.
sascha@3660: 
sascha@3660: - 'skip invalid MainValue part: #'
sascha@3660: - 'skip invalid gauge part: #'
sascha@3660: - 'Error while parsing Q value: <Q>'
sascha@3660: - 'skip invalid data line: #'
sascha@3660: - 'Error while parsing flow velocity values.'
sascha@3660:   Invalide Datenzeile in einer Datei Fliessgeschwindigkeitsmodellen.
sascha@3660: 
sascha@3660: - 'Error while parsing number from data row: #'
sascha@3660:   TODO INGO
sascha@3660: 
sascha@3660: - 'Unknown meta line: #'
sascha@3660: - 'Error while parsing numbers in: #'
sascha@3660: - 'skip invalid data line: #'
sascha@3660: - 'Error while parsing numbers in #'
sascha@3660:   Invalide Datenzeile in einer Datei mit Sedimentdichten.
sascha@3660: 
sascha@3660: - 'STA file is empty'
sascha@3660: - 'STA file has not enough lines'
sascha@3660: - 'STA file is too short'
sascha@3660:   Stammdatendatei ist leer oder hat zu wenige Zeilen.
sascha@3660: 
sascha@3660: - 'First line in STA file is too short.'
sascha@3660:   Die erste Zeile der Stammdaten ist zu kurz.
sascha@3660: 
sascha@3660: - 'STA: second line is too short'
sascha@3660:   Die zweite Zeile ist zu kurz.
sascha@3660: 
sascha@3660: - 'STA: parsing of the datum of the gauge failed'
sascha@3660: 
sascha@3660: - 'STA: 'XYZ' is not a valid long number.'
sascha@3660:   Die Pegelnummer ist invalide.
sascha@3660: 
sascha@3660: - 'STA: Not enough columns for aeo and datum.
sascha@3660:   AEO und Pegelnullpunkt können nicht ermittelt werden.
sascha@3660: 
sascha@3660: - 'STA: cannot parse aeo or datum.'
sascha@3660:   AEO oder Pegelnullpunkt sind invalide.
sascha@3660: 
sascha@3660: - 'STA: value not parseable in line #'
sascha@3660:   Wert ist nicht als Zahl zu interpretieren.
sascha@3660:   
sascha@3660: - 'PRF: cannot open file <FILE>'
sascha@3660:   Die PRF kann nicht geöffnet werden.
sascha@3660: 
sascha@3660: - PRF: file is empty
sascha@3660: - PRF: First line does not look like a PRF data pattern.
sascha@3660: - PRF: premature EOF. Expected integer in line 2
sascha@3660: - PRF: Expected <num> in line 2
sascha@3660: - PRF: invalid integer in line 2
sascha@3660: - PRF: premature EOF. Expected pattern for km extraction
sascha@3660: - PRF: line 4 does not look like a PRF km extraction pattern.
sascha@3660: - PRF: premature EOF. Expected skip row count.
sascha@3660: - PRF: line 5 is not an positive integer.
sascha@3660: - PRF: cannot extract km in line #
sascha@3660:   Das PRF-Format ist komplex. Hier sollten weitere Information
sascha@3660:   zur genaueren Analyse herangezogen werden.
sascha@3660: 
sascha@3660: - 'cannot access WST file <FILE>'
sascha@3660:   Die WST-Datei konnte nicht gefunden werden.
sascha@3660: 
sascha@3660: - 'Found an invalid row in the AT file.'
sascha@3660:   Eine Zeile in einer AT-Datei ist nicht korrekt.
sascha@3660: 
sascha@3660: - 'AT: invalid number <XYZ>'
sascha@3660:   Eine Zahl wurde erwartet aber nicht gefunden.
sascha@3660: 
sascha@3662: - 'Try to add Q range without waterlevel!'
sascha@3662:   Q-Bereich ohne Wasserstand gefunden.
sascha@3657: 
sascha@3662: - 'Error while parsing Q range: #'
sascha@3662:   Invalider Q-Bereich
sascha@3662: 
sascha@3662: - 'skip invalid waterlevel line: #'
sascha@3662:   Ungültige Wasserstandslinie
sascha@3662: 
sascha@3662: - 'Error while parsing number values: #'
sascha@3662:   Ungültige Zahlenwerte.
sascha@3662: 
sascha@3662: - 'ANN: not enough columns in line #'
sascha@3662:   Nicht genug Zeichenspalten in KM-Datei
sascha@3662: 
sascha@3662: - 'ANN: invalid number in line #'
sascha@3662:   Ungültige Zahl.
sascha@3662: 
sascha@3662: - 'ANN: cannot parse 'Unterkante' in line #'
sascha@3662:   Die Unterkante in einer KM-Datei konnte nicht gelesen werden.
sascha@3662: 
sascha@3662: - 'ANN: cannot parse 'Unterkante' or 'Oberkante' in line #'
sascha@3662:   Unter- oder Oberkannte liegen in einem falschen Format vor.
sascha@3662: 
sascha@3662: - 'ANN: duplicated annotation 'XYZ' in line #'
sascha@3662:   Ein Duplikat eines Streckenfavoriten wurde gefunden.
sascha@3662: 
sascha@3662: - 'ANN: 'XYZ' is not a directory.'
sascha@3662:   Unterverzeichnis konnte nicht geöffnet werden.
sascha@3662: 
sascha@3662: - 'ANN: cannot list directory 'XYZ''
sascha@3662:   Unterverzeichnis konnte nicht durchsucht werden.
sascha@3662: 
sascha@3662: - 'BHP: Meta line did not match any known type: #'
sascha@3662:   Unbekannter Typ.
sascha@3662: 
sascha@3662: - 'BHP: Error while parsing timeinterval!'
sascha@3662:   Ungültiges Zeitinterval.
sascha@3662: 
sascha@3662: - 'BHP: Error while parsing year!'
sascha@3662:   Ungültige Jahresangabe.
sascha@3662: 
sascha@3662: - 'BHP: Error while parsing sounding width!'
sascha@3662:   Unbekannte Peilungsbreite.
sascha@3662: 
sascha@3662: - 'BHP: Error while parsing range!'
sascha@3662:   Bereichsangabe fehlerhaft.
sascha@3662: 
sascha@3662: - 'MWP: Unknown meta line: #'
sascha@3662:   Meta-Informationen ungültig.
sascha@3662: 
sascha@3662: - 'MWP: skip invalid data line: #'
sascha@3662:   Ungültige Datenzeile wurde übersprungen.
sascha@3662: 
sascha@3662: - 'MWP: Error while parsing numbers in #'
sascha@3662:   Falsche Zahlenformat.
sascha@3662: 
sascha@3662: - 'ANNCLASS: rule has no name'
sascha@3662:   Klassifizierungsregel für Streckenfavoriten hat keinen Namen.
sascha@3662: 
sascha@3662: - 'ANNCLASS: pattern has no 'pattern' attribute.'
sascha@3662:   Klassifizierungsmuster für Streckenfavoriten hat kein Muster.
sascha@3662: 
sascha@3662: - 'ANNCLASS: pattern has unknown type 'XYZ''
sascha@3662:   Klassifizierungsmuster für Streckenfavoriten konnte keinem Typ zugeordnet werden.
sascha@3662: 
sascha@3662: - 'ANNCLASS: pattern 'XYZ' is invalid.'
sascha@3662:   Klassifizierungsmuster für Streckenfavoriten ist ungültig.
sascha@3662: 
sascha@3662: - 'BSP: Error while parsing data row.'
sascha@3662:   Ungültige Datenzeile.
sascha@3662: 
sascha@3662: - 'SYP: Unknown meta line: #'
sascha@3662:   Ungültige Metadatenzeile.
sascha@3662: 
sascha@3662: - 'SYP: skip invalid data line #'
sascha@3662:   Ungültige Datenzeile wurde übersprungen.
sascha@3662: 
sascha@3662: - 'SYP: Error while parsing numbers in #'
sascha@3662:   Ungültige Zahlenformatierung.
sascha@3662: 
sascha@3662: - 'SYP: Unknown time interval string <XYZ>'
sascha@3662:   Falsches Datumformat.
sascha@3662: 
sascha@3662: - 'SYP: Error while parsing years <XYZ>'
sascha@3662:   Falsches Jahreszahlformat.
sascha@3662:  
sascha@3662: - 'SYP: Error while parsing ranges of <XYZ>'
sascha@3662:   Bereichsangaben fehlerhaft.
sascha@3662: 
sascha@3662: - 'SYP: Unknown grain fraction <XYZ>'
sascha@3662:   Unbekannte Kornfraktion.
sascha@3662: 
sascha@3662: - 'WST: invalid number.'
sascha@3662:   Ungültige Zahl.
sascha@3662: 
sascha@3662: - 'WST: km <km> (<Zeile>) found more than once. -> ignored.'
sascha@3662:   Ein Kilometer ist doppelt in einer WST-Datei enthalten.
sascha@3662: 
sascha@3662: - 'HYK: zone coordinates swapped in line #'
sascha@3662:   Fliesszonenkordinaten wurden in umgekehrter Reihenfolge angeben.
sascha@3662: 
sascha@3662: - 'BHS: Skip invalid file 'XYZ''
sascha@3662:   Die Inhalte der Datei sind ungültig.
sascha@3662: 
sascha@3662: - 'ISQ: Unable to store sq relation value.'
sascha@3662:   S(Q) Beziehung konnte nicht gespeichert werden.
sascha@3662: 
sascha@3662: - 'ISQ: Cannot determine sq relation without time interval.'
sascha@3662:   Einer S(Q)-Beziehung ist keine zeitliche Gültigkeit zugeordnet.
sascha@3662: 
sascha@3662: - 'IWD: skip invalid waterlevel difference - no unit set!'
sascha@3662:   Wasserstandsdifferenz hat keine Einheit.
sascha@3662: 
sascha@3662: - 'BHE: Skip file - invalid current elevation model.'
sascha@3662:   Höhenmodell ungültig.
sascha@3662: 
sascha@3662: - 'BHE: Skip file - invalid time range.'
sascha@3662:   Zeitbereich ungültig.
sascha@3662: 
sascha@3662: - 'BHE: Skip file - invalid km range.'
sascha@3662:   Kilometerbereich ungültig.
sascha@3662: