[opengeodb] Nochmal zu Prosa-Namen wie "Brandis bei Wurzen"(war: Inkonsistenzen der Download-Daten)
Martin Trautmann
traut at gmx.de
Sam Mar 29 06:28:31 CET 2008
Stephan S wrote:
> Hallo Andreas,
>
>> na mit SQL bekommt man das schon hin - das macht man schließlich genau ein
>> mal nach dem Import.
>
> klar, da hab ich mich vielleicht missverständlich ausgedrückt. Ich
> wollte nicht behaupten, dass es nicht geht, ich bin mir nur nicht sicher,
> ob das sinnvoll ist. Solange Martin das per Skript erzeugt und
> mitliefert ist das so sicher kein Problem, aber wenn ich selbst das
> ganze anpassen muss, weil bei mir neue Datensätze mit neuen Zeichen
> dazukommen ist das schon sehr unübersichtlich zu prüfen welche Zeichen
> noch zu ersetzen sind und das entsprechend anzupassen.
Ich würde hier aber eine reine SQL-Lösung bevorzugen. Keine Ahnung, ob
irgend jemand SQL ohne PHP einsetzt - ich möchte es aber nicht voraussetzen.
Die Perl-Routine ist recht kurz, da der translate-Befehl (tr) da recht
mächtig ist.
> Ich ging davon aus, dass die Datensätze vom Typ 500100002 dann gar nicht
> mehr im Dump enthalten sind,
Im Moment wären jene 500100002 dann nicht mehr im Dump enthalten wo
SORTNAME == ascii(name) erfüllt wäre - wo also der SORTNAME identisch
ist zum konvertierten ASCII des Namen. Bei Langformen wäre der SORTNAME
noch als Such- und Sortiername enthalten.
>> Mit einem simplen SQL Script kann man all die Sonderzeichen ersetzen:
>>
>> UPDATE geodb_textdata SET text_val=upper(text_val) WHERE
>> text_type=500100002;
>> UPDATE geodb_textdata SET text_val=replace(text_val,'À','A') WHERE
>> text_type=500100002;
>> UPDATE geodb_textdata SET text_val=replace(text_val,'Á','A') WHERE
>> text_type=500100002;
>> ...
>> UPDATE geodb_textdata SET text_val=replace(text_val,'Ä','AE') WHERE
>> text_type=500100002;
>> ...
... wobei hier eben sichergestellt werden müsste, dass entweder nur die
Datensätze ohne SORTNAME mit UPPER(Name) gefüllt werden müssten, die
nicht schon vorliegen. Ausserdem weiss ich nicht, wie man in SQL dann
noch das Aufräumen am Schluss erledigt: Ich werfe alles weg, was nicht
A-Z, Leerzeichen, derzeit noch Bindestrich (wird durch Leerzeichen
ersetzt) und Punkt ist.
> Rein akademisch würde mich da die Laufzeit schon mal interessieren ;-)
> Hier wäre dann wohl schon ein entsprechender Hinweis auf eine Kaffeepause
> fällig...
Für Perl kann ich's dir geben...
> Vielleicht sollte man auch hinterher noch eine Abfrage starten, die alle
> Datensätze liefert, die immer noch unerwünschte Zeichen enthalten, um zu
> sehen ob man alles erschlagen hat:
>
> SELECT *
> FROM geodb_textdata
> WHERE text_val REGEXP "[^A-Z \-\.]"
> AND text_type = 500100002;
Yepp, sehr hilfreich - s.o. vielleicht besser "[^A-Z \.]"
Schönen Gruß
Martin