norBIT / alkisimport

ALKIS-Import
http://www.norbit.de/68/
GNU General Public License v2.0
28 stars 17 forks source link

regexp_replace beim Parsen aus ax_bodenstufe #70

Closed jschrae closed 10 months ago

jschrae commented 10 months ago

Hallo Jürgen, meine Herausforderung ist es, die Klassenzeichen der Bodenschätzung darzustellen. Dieses komplexe Element setzt sich aus verschiedenen Textbestandteilen und Zahlen zusammen. alkis_import erzeugt dafür verschiedene Views. Momentan fehlten hier noch ein paar Views. Für die Bodenstufe (v_bschaetz_bodenstufe), Klimastufe, Entstehungsart und Wasserverhaeltnisse habe ich diese in 4_postnas-keytables.sql ergänzt. Klimastufe, Entstehungsart und Wasserverhaeltnisse habe ich auch einzelne Views geteilt, weil in GID7.1.2 aus ehemals einer "Tabelle" ax_entstehungsartoderklimastufewasserverhaeltnisse nun die drei einzelnen Tabellen AX_Entstehungsart, AX_Klimastufe und AX_Wasserverhaeltnisse geworden sind. Das aber nur am Rande... Das eigentliche Problem ist aber das Parsen des Textes 'Bodenstufe ("(III)")' aus AX_Bodenstufe. Als Ergebnis müsste '(III)' erzeugt werden, es wird aber 'III)"' daraus. Erzeugen desr Views in 4_postnas-keytables.sql:

SELECT alkis_dropobject('v_bschaetz_bodenstufe');
CREATE VIEW v_bschaetz_bodenstufe AS
    SELECT
        wert::int AS wert
        ,regexp_replace( beschreibung, E'^.*\\((.*)\\)$', E'\\1') AS kurz
        ,beschreibung AS bezeichner
    FROM ax_bodenstufe;

SELECT alkis_dropobject('v_bschaetz_klimastufe');
CREATE VIEW v_bschaetz_klimastufe AS
    SELECT
        wert::int AS wert
        ,regexp_replace( beschreibung, E'^.*\\((.*)\\)$', E'\\1') AS kurz
        ,beschreibung AS bezeichner
    FROM ax_klimastufe;

SELECT alkis_dropobject('v_bschaetz_entstehungsart');
CREATE VIEW v_bschaetz_entstehungsart AS
    SELECT
        wert::int AS wert
        ,regexp_replace( beschreibung, E'^.*\\((.*)\\)$', E'\\1') AS kurz
        ,beschreibung AS bezeichner
    FROM ax_entstehungsart;

SELECT alkis_dropobject('v_bschaetz_wasserverhaeltnisse');
CREATE VIEW v_bschaetz_wasserverhaeltnisse  AS
    SELECT
        wert::int AS wert
        ,regexp_replace( beschreibung, E'^.*\\((.*)\\)$', E'\\1') AS kurz
        ,beschreibung AS bezeichner
    FROM ax_wasserverhaeltnisse ;

Das Problem sind offensichtlich die doppelten Klammern im Text 'Bodenstufe ("(III)")'. Wenn man daraus den Inhalt zwischen den Anführungszeichen extrahieren möchte, kommt man scheinbar an die Grenzen von regexp_replace. Vielleicht gibt's ja eine Lösung für die Problematik... Mit freundlichen Grüßen Jens

jef-n commented 10 months ago

So schnell kommt man nicht an die Grenzen von RE.