View Full Version : Hausnummer selektieren
Hallo *ALL!
Hat jemand von Euch eine Idee oder Listing oder Vorschlag NUR die Hausnummer aus der Strasse zu entnehmen. Gerne per SQL - gerne aber auch in ILE RPG. Natürlich gibt es so paar Geschichten wie z.B. Gersprenzweg 1a oder Mühlenstr. 17-21 oder Neuendorfer Strasse 26/4. Naja - die Aushahmen halt.
Viele Grüsse aus dem sonnigen Nürnberg
dirk
Hallo Dirk,
ich würde es so angehen:
Den Strassennamen in Token unterteilen
(Funktion strtok in Q2CLE); das erste Token, das mit 0-9 anfängt, wäre dann die
Hausnummer.
Gruss aus dem ebenfalls sonnigen Darmstadt
Torsten
Das mit dem 1 Token das numerisch beginnt, ist nicht so optimal,
siehe "Straße des 17. Juni 102" das letzte wäre vielleicht besser?
Auch "Hof 3 Gebäude 5" bringt Probleme.
Ich habe aber auch keine Idee das maschinell besser zu machen. Zumindest nicht mit einem einzigen Befehl.
Gruß Holger:confused:
Hallo Dirk,
mit einem einzigen Statement klappt das nicht!
Hier ist ein Beispiel für eine Funktion, die die Haus-Nr. ermittelt.
(ab Release V5R1M0)
Einige Sonderfälle sind abgefangen für andere Sonderfälle kannst Du ja die Funktion modifizieren.
Prototyp:
D HausNummer PR 10A
D PPStr like(Str) const
P HausNummer B
* Procedure Interface
D HausNummer PI 10A
D PPStr like(Str) const
* Hilfs-Felder
D RtnHausNr S 10A
D Index S 3U 0
* Ermitteln Haus-Nr.
/Free
if %CheckR(' ': PPStr) = %Len(PPStr);
Return *Blanks;
Endif;
Monitor;
For Index = %Scan(' ': PPStr: 1) to %CheckR(' ': PPStr)
by %Scan(' ': PPStr: Index+1)-Index;
If %Subst(PPStr: Index+1: 1) >= '0'
and %Subst(PPStr: Index+1: 1) <= '9';
RtnHausNr = %Subst(PPStr: Index+1: %CheckR(' ': PPStr) - Index);
EndIf;
if %Scan(' ': PPStr: Index + 1) > %CheckR(' ': PPStr);
Return RtnHausNr;
Endif;
EndFor;
on-Error;
Return *Blanks;
EndMon;
Return *Blanks;
/End-Free
P HausNummer E
Die Funktion liefert für folgende Beispiele folgende Ergebnisse:
TestInSerT 234 --> 234
TestInsert 1A --> 1A
TEST Ins 4/25b --> 4/25B
Test 2 x --> 2 x
T e s t 13245 --> 12345
TestinsertABCDE --> *Blanks
TESTInsert A23 --> *Blanks
TestI --> *Blanks
Test XY z 23a4 --> 23a4
Birgitta