Separate the house number from the street name: Difference between revisions

Added EchoLisp
(→‎{{header|Racket}}: New Racket solution)
(Added EchoLisp)
Line 43:
Schmidener Weg 3
Karl-Weysser-Str. 6</pre>
 
=={{header|EchoLisp}}==
<lang scheme>
(lib 'struct)
(lib 'sql)
 
(define adresses (make-table (struct adresse (name number))))
 
;; parse street<space>number| II...
(define extractor (make-regexp
"^(.*?)\\s(\\d+$|\\d+.*$|II*$)"))
;; making our best with the special names
(define specials '("1940" "1945" "'45" "'40"))
 
(define (rep-special str specials)
(for/fold (ostr str) ((special specials))
(string-replace ostr special (string-append "@" special))))
(define (un-rep-special record)
(set-car! record (string-replace (car record) "/@/g" "" )))
 
 
(define (task)
(for-each (lambda (x)
(table-insert adresses
(un-rep-special
(or* (regexp-exec extractor (rep-special x specials))
(list x '❓❓❓))))) adressen))
 
(define adressen '(
"Plataanstraat 5"
"Straat 12"
"Straat 12 II"
"Straat 1940 II"
"Dr. J. Straat 40"
"Dr. J. Straat 12 a"
"Dr. J. Straat 12-14"
"Laan 1940 – 1945 37"
"Plein 1940 2"
"1213-laan 11"
"16 april 1944 Pad 1"
"1e Kruisweg 36"
"Laan 1940-'45 66"
"Laan '40-'45"
"Langeloërduinen 3 46"
"Marienwaerdt 2e Dreef 2"
"Provincialeweg N205 1"
"Rivium 2e Straat 59."
"Nieuwe gracht 20rd"
"Nieuwe gracht 20rd 2"
"Nieuwe gracht 20zw /2"
"Nieuwe gracht 20zw/3"
"Nieuwe gracht 20 zw/4"
"Bahnhofstr. 4"
"Wertstr. 10"
"Lindenhof 1"
"Nordesch 20"
"Weilstr. 6"
"Harthauer Weg 2"
"Mainaustr. 49"
"August-Horch-Str. 3"
"Marktplatz 31"
"Schmidener Weg 3"
"Karl-Weysser-Str. 6"))
</lang>
{{out}}
<pre>
(task)
(table-print adresses)
[0] Plataanstraat 5
[1] Straat 12
[2] Straat 12 II
[3] Straat 1940 II
[4] Dr. J. Straat 40
[5] Dr. J. Straat 12 a
[6] Dr. J. Straat 12-14
[7] Laan 1940 – 1945 37
[8] Plein 1940 2
[9] 1213-laan 11
[10] 16 april 1944 Pad 1
[11] 1e Kruisweg 36
[12] Laan 1940-'45 66
[13] Laan '40-'45 ❓❓❓
[14] Langeloërduinen 3 46
[15] Marienwaerdt 2e Dreef 2
[16] Provincialeweg N205 1
[17] Rivium 2e Straat 59.
[18] Nieuwe gracht 20rd
[19] Nieuwe gracht 20rd 2
[20] Nieuwe gracht 20zw /2
[21] Nieuwe gracht 20zw/3
[22] Nieuwe gracht 20 zw/4
[23] Bahnhofstr. 4
[24] Wertstr. 10
[25] Lindenhof 1
[26] Nordesch 20
[27] Weilstr. 6
[28] Harthauer Weg 2
[29] Mainaustr. 49
[30] August-Horch-Str. 3
[31] Marktplatz 31
[32] Schmidener Weg 3
[33] Karl-Weysser-Str. 6
</pre>
 
=={{header|J}}==