Straße und HausNr. trennen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Straße und HausNr. trennen

15 Apr 2020, 16:01

Guten Abend,
Habe eine lange Adressliste,
Beispiele:
Spoiler
Ich muss die Straße und Hausnr. trennen, da bietet sich StrSplit an, aber wonach soll es gesplittert werden, die Kunden haben ihre Straßennamen in unterschiedliche Schreibweisen angegeben. Erkennt, jemand ein Zusammenhang bzw. hat eine Idee, wie man Straßenname und Nr. trennen kann.

LG und Danke
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Straße und HausNr. trennen

15 Apr 2020, 16:58

Hi,

hast du zufällig Excel installiert? Dafür hätte ich etwas.

Ansonsten:
- letzter "." von rechts
- letztes Leerzeichen (ignoriere dabei einen einzelnen Buchstaben ganz rechts)
- letzte n Zeichen sind numerisch (ignoriere einzelne Buchstaben und Sonderzeichen ("-", "/" "(", ")" usw.
Wahrscheinlich mit unterschiedlichen Durchläufen. Ggf. ersetzt du bestimmte Muster temporär mit Zeichen, die sonst nicht vorkommen, wie z.B. "#" oder "~".
... Trotz allem: um eine gewisse manuelle Arbeit wirst du nicht herumkommen (wenn z.B. noch textliche Ergänzungen hinzukommen, wie z.B. "(Hinterhof)" oder "(3. Etage links)"

Viel Erfolg
HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
hoppfrosch
Posts: 443
Joined: 07 Oct 2013, 04:05
Location: Rhine-Maine-Area, Hesse, Germany
Contact:

Re: Straße und HausNr. trennen  Topic is solved

16 Apr 2020, 00:35

Du kannst aber auch RegExMatch verwenden.

Ich hab mal folgenden RegEx für deine Beispiele zusammengebastelt:

Code: Select all

([äöüÄÖÜßa-zA-Z\-\. ]+)\s*(\d+.*)
Siehe: https://regex101.com/r/CxwaDX/1
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Straße und HausNr. trennen

16 Apr 2020, 04:20

... wow! Respekt! :shock: :clap:

Kannst du für einen RegEx-Laien dazu ein kleines Beispielscript zeigen (ein Stringbeispiel reicht aus)?. Ich hatte die Formel nur mit dem RegEx-Coach getestet.

HG - Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
BNOLI
Posts: 548
Joined: 23 Mar 2020, 03:55

Re: Straße und HausNr. trennen

16 Apr 2020, 06:46

Thx hoppfrosch, mal wieder was zum Neidisch werden :x denn als die RegExDNA verteilt wurde hab ich mich wohl gerade für essbare Fingerfarben angestellt :lol:
Interessanterweise hat mir die farbliche Unterlegung im verlinkten RegEx-Tester synaptisch auch weitergeholfen.
Danach wäre das Auffinden der ersten Zahl im String, anschließender Abgleich des Zeichens links davon, und ggf Einfügen eines Leerzeichens eine Option "zu Fuß" gewesen.
Hätte, wäre, wenn - ich geh jetzt mal wieder die RegEx anschmachten :shifty:

PS. :arrow: hier wäre noch ein dankbarer Abnehmer für eine Ultraleichte RegEx (Behauptung der Woche) Einfach eine Leerzeile als Sektionsseparator ... :shh: :shifty: :silent:
Remember to use [code]CODE[/code]-tags for your multi-line scripts. Stay safe, stay inside, and remember washing your hands for 20 sec !
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Straße und HausNr. trennen

16 Apr 2020, 10:31

Danke für eure Vorschläge!

ich bin heute morgen aufgewacht und hatte ein Geistesblitz:

Code: Select all

Anschriften=
(
Eichetstrasse 21
Meiereistr.28
Dominikus-Schneider-Str. 9
Lindacher-Str.48 d
Langeßallee27
Neuer Weg 68 B
Beuthener Str.9-15
)
Loop, parse, Anschriften, `n, `r
{

ZahlPos := RegExMatch(A_LoopField, "\d+")
StrassenName := SubStr(A_LoopField, 1 , ZahlPos-1)
HausNr := SubStr(A_LoopField, ZahlPos)
MsgBox, % StrassenName 
MsgBox, % HausNr
}

@hoppfrosch
Dein Code ist eleganter, vielen Dank.
garry
Posts: 3770
Joined: 22 Dec 2013, 12:50

Re: Straße und HausNr. trennen

16 Apr 2020, 12:17

@KHA , gute Idee nach dem Aufwachen ....

Code: Select all

Anschriften=
(
Eichetstrasse 21
Meiereistr.28
Dominikus-Schneider-Str. 9
Lindacher-Str.48 d
Langeßallee27
Neuer Weg 68 B
Beuthener Str.9-15
)
Loop, parse, Anschriften, `n, `r
{
ZahlPos      := RegExMatch(A_LoopField, "\d+")
StrassenName := SubStr(A_LoopField, 1 , ZahlPos-1)
HausNr       := SubStr(A_LoopField, ZahlPos)
All          .= strassenname . "," . HausNr . "`r`n"
}
msgbox,%all%
return
User avatar
LuckyJoe
Posts: 341
Joined: 02 Oct 2013, 09:52

Re: Straße und HausNr. trennen

16 Apr 2020, 12:56

... und noch ein ;-)

Code: Select all

Anschriften=
(
Eichetstrasse 21
Meiereistr.28
Dominikus-Schneider-Str. 9
Lindacher-Str.48 d
Langeßallee27
Neuer Weg 68 B
Beuthener Str.9-15
)
Loop, parse, Anschriften, `n, `r
{
ZahlPos      := RegExMatch(A_LoopField, "\d+")
StrassenName := SubStr(A_LoopField, 1 , ZahlPos-1)
HausNr       := SubStr(A_LoopField, ZahlPos)
All          .= Trim(strassenname) . A_Space HausNr . "`r`n"
}
msgbox,%all%
return
Herzliche Grüße aus dem Rheinland
Lucky Joe
UnReALiTyy
Posts: 223
Joined: 06 Jun 2017, 11:38

Re: Straße und HausNr. trennen

17 Apr 2020, 00:08

Oder etwas Verkürzt in einer Zeile :lol:

Code: Select all

Anschriften =
(
Eichetstrasse 21
Meiereistr.28
Dominikus-Schneider-Str. 9
Lindacher-Str.48 d
Langeßallee27
Neuer Weg 68 B
Beuthener Str.9-15
)
Loop, parse, Anschriften, `n, `r
{
ZahlPos := RegExMatch(A_LoopField, "\d+"), HausNr := SubStr(A_LoopField, ZahlPos), StrassenName := SubStr(A_LoopField, 1 , ZahlPos-1)
all .= strassenname . A_Space HausNr . "`r`n"
}
msgbox, % all
return
aifritz
Posts: 301
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: Straße und HausNr. trennen

19 Apr 2020, 06:36

Hallo Zusammen,

habe die Hoppfrosch Version mal in ein RegExMatch gepackt.

..und mir mal ein paar exotische Str-Namen aus Deuschtland rausgesucht, wo der Regex allerdings versagt:
So wird aus 18.-März-Straße 1 -> .-März-Straße 1

Vielleicht hat hier ja noch jemand ein Idee, ob man dies auch noch in dem Regex mit einbauen kann... ;)

Code: Select all

Anschriften=
(
Hochstraße 56/58
Eichetstrasse 21
Meiereistr.28
Dominikus-Schneider-Str. 9
Lindacher-Str.48 d
Langeßallee27
Neuer Weg 68 B
Beuthener Str.9-15
Züricher Straße 17// 28
18.-März-Straße 1
1. Kirchstraße 26
1 Maja 5
1.Moorriege 3
1. Teich-Privatweg 33
55er Straße 33
5.května 12
5. května 12
)

;Objekt Version
Loop, parse, Anschriften, `n, `r
{
	RegExMatch(A_LoopField,"O)([äöüÄÖÜßa-zA-Z\-\. ]+)\s*(\d+.*)",m) ;Das "O)" am Anfang macht Teilmuster zu einem Objekt.
	msgbox % m[1] "`n" m[2]
}

;Nicht Objekt Version
Loop, parse, Anschriften, `n, `r
 {
 	RegExMatch(A_LoopField,"([äöüÄÖÜßa-zA-Z\-\. ]+)\s*(\d+.*)",m)
	msgbox % m1 "`n" m2
 }

just me
Posts: 9457
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Straße und HausNr. trennen

19 Apr 2020, 07:10

Moin,

Ziffern am Anfang können wohl nicht die Hausnummer sein. Die könnte man mit "O)^(\d*... einbeziehen. In Berlin gibt es allerdings auch Anschriften wie Straße 8 25.
garry
Posts: 3770
Joined: 22 Dec 2013, 12:50

Re: Straße und HausNr. trennen

19 Apr 2020, 09:50

.... oder in Mannheim ( Quadratestadt )

Mannheims Innenstadt ist in viereckigen Häuserblocks angeordnet.
Anstatt Straßennamen zu vergeben, verwendet die Stadt ein System aus Buchstaben und Zahlen.
So ist jedem Häuserblock eine Zahl und ein Buchstabe zugewiesen.
Mannheimer wohnen also in keiner Strasse, sondern beispielsweise in
„T3 5“ oder „D6 18“ ( also z.B. T3 wäre die 'Strasse' )
Die Hausnummern beginnen an der dem Schloss zugewandten Ecke des jeweiligen Quadrats.
Bei den links liegenden Quadraten A bis K laufen sie gegen den Uhrzeigersinn um das Quadrat.
Bei den Quadraten L bis U laufen die Hausnummern entsprechend umgekehrt im Uhrzeigersinn.
aifritz
Posts: 301
Joined: 29 Jul 2018, 11:30
Location: Germany

Re: Straße und HausNr. trennen

19 Apr 2020, 13:23

Danke just me, das klappt schon mal ganz gut :)

Dann wären dies noch die Härtefälle :shock:

Straße 8 25
T3 5
D6 18
Straße des 17. Juni 105

Code: Select all

Anschriften=
(
Hochstraße 56/58
Eichetstrasse 21
Meiereistr.28
Dominikus-Schneider-Str. 9
Lindacher-Str.48 d1
Langeßallee27
Neuer Weg 68 B 1
Beuthener Str.9-15
Züricher Straße 17// 28
18.-März-Straße 1
1. Kirchstraße 26
1 Maja 5
1.Moorriege 3
1. Teich-Privatweg 33
55er Straße 33
5.kvetna 12
5. kvetna 12
Osterende 14 und 15
Lerchenstraße 17 - 21
Ackerweg 5 Hof 3 Gebäude 8
Straße 8 25
T3 5
D6 18
Straße des 17. Juni 105
)

;Objekt Version
Loop, parse, Anschriften, `n, `r
{
	RegExMatch(A_LoopField,"O)(^\d*[äöüÄÖÜßa-zA-Z\-\. ]+)\s*(\d+.*)",m) ;Das "O)" am Anfang macht Teilmuster zu einem Objekt.
	msgbox % m[1] "`n" m[2]
}

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 57 guests