PDA

View Full Version : Hausnummer selektieren



cicero22
18-09-03, 09:57
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

torsten
18-09-03, 10:38
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

holly
18-09-03, 14:19
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:

B.Hauser
19-09-03, 09:15
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