norBIT/alkisimport

regexp_replace beim Parsen aus ax_bodenstufe

Closed this issue · 1 comments

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

So schnell kommt man nicht an die Grenzen von RE.