#!C:/Perl/bin/perl.exe -w # Program.. : # Function. : . # Usage.... : # History.. : 200604 - Allan Dystrup, Ver.1.0 - Initial version (prot +otype). # Copyright.: (c) AND/KMD EDPI - All rights reserved. # ToDo......: # ==================================================================== +========= package Municipality;; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(loadmap o2m n2m m20 m2n o2n n2o); ### ================================================================== +==== ### use : Pragmas (compiler directives) ### ================================================================== +==== use strict; #use diagnostics; use warnings; use locale; use Data::Dumper; use Cwd; use lib Win32::GetShortPathName(getcwd()) . "/lib"; my (%mapOld, %mapNew, %revOld, %revNew, %map, $in); my $debug = 0; ### ================================================================== +==== ### loadmap ### ================================================================== +==== sub loadmap { ### Read to %municipality {code} = name my ($type, $code, $name); $mapOld{0} = $mapNew{0} = $map{0} = 'undefined'; =cut # a) Read from extern datafile: 'municipality.txt' my $D = Win32::GetShortPathName(getcwd()); my $DF = "$D/municipality.txt"; open(DFH, "< :encoding(cp1252)", "$DF") || die "cannot open [$DF]: + $!"; while (<DFH>) { =cut # b) Read from embedded __DATA__ section # binmode (DATA, ":encoding(cp1252)") || warn "Can't set cp1252 ec +coding: $!"; while (<DATA>) { $debug and print; chomp; $type = 0; ($type, $code, $name) = m/^(\*?)(\d{3}),(\S+)/; if ($code) { $debug and print "\t[$type] [$code] [$name]\n"; if ( $type eq '*' ) { $mapNew{$code} = $name; $in = "$type$code"; $map{"$type$code"} = ["$type$code", $name]; $map{"$type$name"} = \@{$map{"$type$code"}}; } else { $mapOld{$code} = $name; if (! $map{"$code"} ) { $map{"$code"} = ["$code", $name]; # $M{C}->[C,N] $map{"$name"} = \@{$map{$code}}; # $M{N}->\@$M{C} } push @{$map{$in}}, \@{$map{"$code"}}; # $M{I}->[C,N,\@$M{oC +}] push @{$map{"$code"}}, \@{$map{$in}}; # $M{C]->[C,N,\@$M{nC +}] } } else { $in = 0; } } ### Optional debug of dstructs $debug and print Dumper(\%mapOld); $debug and print Dumper(\%mapNew); $debug and print Dumper(\%map); if ( $debug ) { foreach (sort keys %map) { print "$map{$_}->[0] : $map{$_}->[1]\n"; for my $i (2 .. @{$map{$_}}-1) { print "\t@{$map{$_}->[$i]}[0],@{$map{$_}->[$i]}[1]\n"; } } } ### Reverse to %municipality {name} = code %revOld = reverse %mapOld; %revNew = reverse %mapNew; $debug and print Dumper(\%revOld); $debug and print Dumper(\%revNew); } ### ================================================================== +==== ### oldcode2municipality, municipality2oldcode ### newcode2municipality, municipality2newcode ### oldcode2newcode , newcode2oldcode ### ================================================================== +==== sub o2m { defined($mapOld{$_[0]}) ? $mapOld{$_[0]} : "Undefined:$_[0 +]"; } sub m2o { defined($revOld{$_[0]}) ? $revOld{$_[0]} : "Undefined:$_[0 +]"; } sub n2m { defined($mapNew{$_[0]}) ? $mapNew{$_[0]} : "Undefined:$_[0 +]"; } sub m2n { defined($revNew{$_[0]}) ? $revNew{$_[0]} : "Undefined:$_[0 +]"; } sub o2n { defined( $map{$_[0]}) ? \@{$map{$_[0]}} : [$_[0],"undefine +d"]; } sub n2o { o2n($_[0]) }; ### ================================================================== +==== ### unit_test ### ================================================================== +==== sub unit_test { # Fix locale: 850 (OEM - flersproglig latin I) -> 1252 (ANSI - la +tin I) `chcp 1252`; # Switch cp: "Danish_Denmark.850" -> "Danish_Denmar +k.1252" if ($_[0]) { loadmap(); } if ($_[1]) { for (180..233) {(o2m($_)!~/Undefined/i) and print "\t$_ -> ",o2m($ +_),"\n";} print "\n"; for (180..233) {(n2m($_)!~/Undefined/i) and print "\t$_ -> ",n2m( +$_),"\n";} } if ($_[2]) { print m2o("Fredensborg-Humlebæk"),"\n"; print m2n("Fredensborg"),"\n"; print o2m("999"),"\n"; print m2n("Fiktiv"),"\n"; } if ($_[3]) { print Dumper(o2n("*860")); print Dumper(o2n("821")); print Dumper(o2n("100")); print Dumper(o2n("Sindal")); print Dumper(o2n("*Århus")); } } unit_test(1,1,1,1); 1; __DATA__ ====================================================================== +===== = Endeligt fastsatte kommunenumre pr. 010107 -- CPR Kontoret = (c) KMD 2006, Allan Dystrup ====================================================================== +===== ====================================================================== +===== #Region Hovedstaden (1084) *101,København 101,København *147,Frederiksberg 147,Frederiksberg *151,Ballerup 151,Ballerup *153,Brøndby 153,Brøndby *155,Dragør 155,Dragør *157,Gentofte 157,Gentofte *159,Gladsaxe 159,Gladsaxe *161,Glostrup 161,Glostrup *163,Herlev 163,Herlev *165,Albertslund 165,Albertslund *167,Hvidovre 167,Hvidovre *169,Høje-Taastrup 169,Høje-Taastrup *173,Lyngby-Taarbæk 173,Lyngby-Taarbæk *175,Rødovre 175,Rødovre *230,Rudersdal 181,Søllerød 205,Birkerød *183,Ishøj 183,Ishøj *185,Tårnby 185,Tårnby *187,Vallensbæk 187,Vallensbæk *201,Allerød 201,Allerød *190,Furesø 189,Værløse 207,Farum *210,Fredensborg 208,Fredensborg-Humlebæk 227,Karlebo *250,Frederikssund 209,Frederikssund 225,Jægerspris 229,Skibby 233,Slangerup (del af) *260,Frederiksværk-Hundested 211,Frederiksværk 221,Hundested *270,Gribskov 213,Græsted-Gilleleje 215,Helsinge *217,Helsingør 217,Helsingør *219,Hillerød 219,Hillerød 231,Skævinge 233,Slangerup (del af) *223,Hørsholm 223,Hørsholm *240,Egedal 171,Ledøje-Smørum 235,Stenløse 237,Ølstykke *400,Bornholm 400,Bornholm *411,Christiansø 411,Christiansø ====================================================================== +===== =Region Sjælland (1085) *350,Lejre 251,Bramsnæs 257,Hvalsø 261,Lejre *253,Greve 253,Greve *259,Køge 259,Køge 267,Skovbo *265,Roskilde 255,Gundsø 263,Ramsø 265,Roskilde *269,Solrød 269,Solrød *306,Odsherred 305,Dragsholm 327,Nykøbing-Rørvig 343,Trundholm *320,Faxe 313,Haslev 351,Fakse 385,Rønnede *316,Holbæk 315,Holbæk 321,Jernløse 339,Svinninge 341,Tornved 345,Tølløse *326,Kalundborg 301,Bjergsted 309,Gørlev 317,Hvidebæk 319,Høng 323,Kalundborg *329,Ringsted 329,Ringsted *330,Slagelse 311,Hashøj 325,Korsør 331,Skælskør 333,Slagelse *340,Sorø 303,Dianalund 335,Sorø 337,Stenlille *360,Lolland 355,Holeby 359,Højreby 363,Maribo 367,Nakskov 379,Ravnsborg 381,Rudbjerg 383,Rødby *376,Guldborgsund 369,Nykøbing_Falster (Nykøbing Falster) 371,Nysted 375,Nørre Alslev 387,Sakskøbing 391,Stubbekøbing 395,Sydfalster *370,Næstved 307,Fuglebjerg 353,Fladså 357,Holmegaard 373,Næstved 393,Suså *336,Stevns 271,Vallø 389,Stevns *390,Vordingborg 361,Langebæk 365,Møn 377,Præstø 397,Vordingborg ====================================================================== +===== =Region Syddanmark (1083) *420,Assens 421,Assens 433,Glamsbjerg 437,Haarby 485,Tommerup 491,Vissenbjerg 499,Aarup *430,Faaborg-Midtfyn 425,Broby 431,Faaborg 473,Ringe 477,Ryslinge 497,Årslev *440,Kerteminde 439,Kerteminde 441,Langeskov 447,Munkebo *410,Middelfart 429,Ejby 445,Middelfart 451,Nørre_Aaby (Nørre Aaby) *450,Nyborg 449,Nyborg 489,Ullerslev 495,Ørbæk *461,Odense 461,Odense *479,Svendborg 427,Egebjerg 435,Gudme 479,Svendborg *482,Langeland 475,Rudkøbing 481,Sydlangeland 487,Tranekær *480,Bogense 423,Bogense 471,Otterup 483,Søndersø *492,Ærø 492,Ærø =443,Marstal (Ærø pr. 010106) =493,Ærøskøbing (Ærø pr. 010106) *510,Haderslev 509,Christiansfeld (del af) 511,Gram 515,Haderslev 525,Nørre-Rangstrup (del af) 543,Vojens *540,Sønderborg 501,Augustenborg 507,Broager 513,Gråsten 523,Nordborg 533,Sundeved 535,Sydals 537,Sønderborg *550,Tønder 505,Bredebro 517,Højer 521,Løgumkloster 525,Nørre-Rangstrup (del af) 531,Skærbæk 541,Tønder *580,Aabenraa 503,Bov 519,Lundtoft 529,Rødekro 539,Tinglev 545,Aabenraa *561,Esbjerg 557,Bramming 561,Esbjerg 567,Helle (del af) 571,Ribe *563,Fanø 563,Fanø *530,Billund 551,Billund 565,Grindsted 611,Give (del af) *573,Varde 553,Blaabjerg 555,Blåvandshuk 567,Helle (del af) 573,Varde 577,Ølgod *575,Vejen 527,Rødding 559,Brørup 569,Holsted 575,Vejen *607,Fredericia 607,Fredericia *621,Kolding 509,Christiansfeld (del af) 605,Egtved (del af) 621,Kolding 623,Lunderskov 629,Vamdrup *630,Vejle 603,Børkop 605,Egtved (del af) 611,Give (del af) 617,Jelling 627,Tørring-Uldum (del af) 631,Vejle ====================================================================== +===== =Region Midtjylland (1082) *766,Hedensted 613,Hedensted 619,Juelsminde 627,Tørring-Uldum (del af) *615,Horsens 601,Brædstrup (del af) 609,Gedved 615,Horsens *657,Herning 651,Aulum-Haderup 657,Herning 677,Trehøje 685,Aaskov *661,Holstebro 661,Holstebro 679,Ulfborg-Vemb 683,Vinderup *756,Ikast-Brande 625,Nørre-Snede 653,Brande 663,Ikast *665,Lemvig 665,Lemvig 673,Thyborøn-Harboøre *760,Ringkøbing-Skjern 655,Egvad 659,Holmsland 667,Ringkøbing 669,Skjern 681,Videbæk *671,Struer 671,Struer 675,Thyholm *706,Syddjurs 701,Ebeltoft 721,Midtdjurs 733,Rosenholm 739,Rønde *707,Norddjurs 707,Grenaa 725,Nørre_Djurs (Nørre Djurs) 735,Rougsø 747,Sønderhald (del af) *710,Favrskov 709,Hadsten 711,Hammel 713,Hinnerup 717,Langå (del af) 767,Hvorslev *727,Odder 727,Odder *730,Randers 717,Langå (del af) 719,Mariager (del af) 723,Nørhald 729,Purhus 731,Randers 747,Sønderhald (del af) *741,Samsø 741,Samsø *740,Silkeborg 705,Gjern 743,Silkeborg 749,Them 771,Kjellerup *746,Skanderborg 601,Brædstrup (del af) 703,Galten 715,Hørning 737,Ry 745,Skanderborg *751,Århus 751,Århus *779,Skive 777,Sallingsund 779,Skive 781,Spøttrup 783,Sundsøre *791,Viborg 761,Bjerringbro 763,Fjends 769,Karup 775,Møldrup 789,Tjele 791,Viborg 793,Aalestrup (del af) ====================================================================== +===== =Region Nordjylland (1081) *773,Morsø 773,Morsø *787,Thisted 765,Hanstholm 785,Sydthy 787,Thisted *810,Brønderslev-Dronninglund 805,Brønderslev 807,Dronninglund *813,Frederikshavn 813,Frederikshavn 841,Skagen 847,Sæby *860,Hjørring 819,Hirtshals 821,Hjørring 829,Løkken-Vrå 839,Sindal *846,Mariagerfjord 719,Mariager (del af) 793,Aalestrup (del af) 801,Arden 815,Hadsund 823,Hobro 833,Nørager (del af) *825,Læsø 825,Læsø *840,Rebild 833,Nørager (del af) 843,Skørping 845,Støvring *849,Jammerbugt 803,Brovst 811,Fjerritslev 835,Pandrup 849,Aabybro *851,Aalborg 817,Hals 831,Nibe 837,Sejlflod 851,Aalborg *820,Vesthimmerland 793,Aalestrup (del af) 809,Farsø 827,Løgstør 861,Aars
In reply to Re^2: Loading module data
by ady
in thread Loading module data
by ady
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |