Netnummer weten in database

Pagina: 1
Acties:
  • 1.002 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Anoniem: 79652

Topicstarter
Het volgende.

Ik heb in een database (csv) een paar 100 telefoonnummers uit Duitsland staan (netnummer met de rest van het nummer er gelijk aan vast).
Nu wil ik het netnummer ervan weten, dat moet in een ander veld komen te staan.

Ik heb een lijst gevonden op internet met hierin alle netnummers uit Duitsland.
Het probleem is dat ze niet net als in Nederland maar 2 soorten netnummers hebben (3 lang en 4 lang(.
Maar ze hebben er daar 6 soorten :-(

Weet iemand hoe ik dit kan doen, in Acces kom ik er niet meer uit.

Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Een array maken met alle bekende netnummers en dan bij een telefoonnummer kijken met welk netnummer het begint? Lijkt me overigens makkelijker om de gegevens los van elkaar op te slaan, maar dat is misschien een opmerking over iets waar jij geen invloed op hebt...

My personal website


Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 28-04 21:19

The Eagle

I wear my sunglasses at night

Ik neem een beetje aan dat alle vaste nummers in DLD een vaste lengte hebben net als in NL (7 cijfers na het netnummer). Misschien kun je daar wat mee. Da's zeg maar de omgekeerde benadering van het probleem :)

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

The_Eagle schreef op dinsdag 01 maart 2005 @ 16:30:
Ik neem een beetje aan dat alle vaste nummers in DLD een vaste lengte hebben net als in NL (7 cijfers na het netnummer). Misschien kun je daar wat mee. Da's zeg maar de omgekeerde benadering van het probleem :)
Volgens mij is de TS daar duidelijk genoeg over in zijn openingspost?? Daarnaast zijn 0497, 0146 en nog veel meer andere netnummers gewoon geldig in Nederland hoor?
Het probleem is dat ze niet net als in Nederland maar 2 soorten netnummers hebben (3 lang en 4 lang(.
Maar ze hebben er daar 6 soorten :-(

[ Voor 9% gewijzigd door OZ-Gump op 01-03-2005 16:33 ]

My personal website


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
The_Eagle schreef op dinsdag 01 maart 2005 @ 16:30:
Ik neem een beetje aan dat alle vaste nummers in DLD een vaste lengte hebben net als in NL (7 cijfers na het netnummer). Misschien kun je daar wat mee. Da's zeg maar de omgekeerde benadering van het probleem :)
Dat is niet waar, mijn abonneenummer is maar 6 cijfers.

Daarnaast heb je denk ik het risico dat je in bepaalde gevallen geen keuze kunt maken:

Neem bijvoorbeeld het nummer 0501234590 dit zou 0501-234590 of 050-1234567890 kunnen zijn waarbij 050 en 0501 beide geldige netnummers zijn. Hoe wil je dit oplossen?

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

Anoniem: 79652

Topicstarter
In nerderland zijn er ook 2 lengtes.
In DE zijn er ook een paar, dus dat is erg lastig.
The_Eagle schreef op dinsdag 01 maart 2005 @ 16:30:
Ik neem een beetje aan dat alle vaste nummers in DLD een vaste lengte hebben net als in NL (7 cijfers na het netnummer). Misschien kun je daar wat mee. Da's zeg maar de omgekeerde benadering van het probleem :)

Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Neem bijvoorbeeld het nummer 0501234590 dit zou 0501-234590 of 050-1234567890 kunnen zijn waarbij 050 en 0501 beide geldige netnummers zijn. Hoe wil je dit oplossen?
Als ik het goed heb, hebben ze er in Nederland over nagedacht dat daar geen overlap in bestaat. Dat wil zeggen dat bijvoorbeeld Eindhoven (evenals Valkenswaard) als netnummer 040 heeft. Er is geen enkel dorp rondom die twee steden te vinden met netnummers als 0401 of 0407. Dit omdat telefoonnummers natuurlijk wel eenduidig moeten zijn.

But of course, I could be wrong ;)

My personal website


Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 15-04 21:50

FendtVario

The leader drives Vario!

P_de_B schreef op dinsdag 01 maart 2005 @ 16:32:
Daarnaast heb je denk ik het risico dat je in bepaalde gevallen geen keuze kunt maken:

Neem bijvoorbeeld het nummer 0501234590 dit zou 0501-234590 of 050-1234567890 kunnen zijn waarbij 050 en 0501 beide geldige netnummers zijn. Hoe wil je dit oplossen?
Het lijkt me niet dat voorkomt, op deze manier kan de KPN zelf toch ook geen onderscheid maken :?

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 28-04 08:11

Eelke Spaak

- Vlad -

Ik neem aan dat, als 050 en 0501 beide geldige netnummers zijn, er geen telefoonnummer zal bestaan als 050-1*. Dit zou het hele netnummersysteem sowieso in de war schoppen. Volgens mij kan je hier dus gewoon vanuit gaan.

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
FendtVario schreef op dinsdag 01 maart 2005 @ 16:36:
[...]


Het lijkt me niet dat voorkomt, op deze manier kan de KPN zelf toch ook geen onderscheidt maken :?
Hmm, dat is ook weer zo, maar je weet natuurlijk niet of die duitsers zo slim zijn :P

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Dit kan bijna geen typfout zijn :D

[ Voor 3% gewijzigd door OZ-Gump op 01-03-2005 16:38 ]

My personal website


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

050 en 0501 zijn op zich beide geldige netnummers, maar niet tegelijk. Net als internationaal, als een nummer met +123 begint is 't in amerika (+1). +311 is dus Nederland. Zo werkt 't in principe ook bij binnenlandse nummers. Wat je dus kunt doen is een lijst maken met alle netnummers (010, 020, 023, etc.) en dat vergelijken. Ik kan me zo even geen andere manier bedenken.

[ Voor 4% gewijzigd door CyBeR op 01-03-2005 16:41 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Anoniem: 81278

In nederland heb je zoals al eerder gezegt is geen 0401, 0402.... en 0409 als 040 het netnummer van eindhoven e.o. is. Dit zal ook zo zijn in duitsland.

[ Voor 3% gewijzigd door Anoniem: 81278 op 01-03-2005 16:43 ]


Acties:
  • 0 Henk 'm!

Anoniem: 79652

Topicstarter
Ik heb iig al een lijst met alle netnummers in DE.
Dus dat is mooi.
CyBeR schreef op dinsdag 01 maart 2005 @ 16:40:
050 en 0501 zijn op zich beide geldige netnummers, maar niet tegelijk. Net als internationaal, als een nummer met +123 begint is 't in amerika (+1). +311 is dus Nederland. Zo werkt 't in principe ook bij binnenlandse nummers. Wat je dus kunt doen is een lijst maken met alle netnummers (010, 020, 023, etc.) en dat vergelijken. Ik kan me zo even geen andere manier bedenken.

Acties:
  • 0 Henk 'm!

Anoniem: 79652

Topicstarter
Anoniem: 81278 schreef op dinsdag 01 maart 2005 @ 16:43:
In nederland heb je zoals al eerder gezegt is geen 0401, 0402.... en 0409 als 040 het netnummer van eindhoven e.o. is. Dit zal ook zo zijn in duitsland.
Dat klopt wel, maar ik wil het netnummer in een veld hebben om later te zien hoeveel mensen wonen er in dit deel van Duitsland en hoeveel in dat deel van DUitsland enz..

Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 15-04 21:50

FendtVario

The leader drives Vario!

* FendtVario had even een brainstorm met zichzelf

maak een boomstructuur van je netnummers waarbij elke node 1 cijfer is. Een klein voorbeeldje voor NL:

code:
1
2
3
4
5
6
7
0/1/0/    Rotterdam     (010)
    8/4   Oud alblas    (0184)
  3/4/5   Leerdam       (0345)
     /6   Achttienhoven (0346)
  3/5     Soest         (035)
  4/3     Wolfhaag      (043)
    8/5   Boxmeer       (0485)


Stel je hebt het telefoonnummer 0345999999 (fictief) en je wilt het netnummer weten, node is de huidige node in de boomstructuur en nummerIndex is de index van het nummer in het telefoonummer. Dus nummerIndex = 0 > 0, nummerIndex = 3 > 5.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
node = 0;  //alles in nl begint met nul
netnummer = netnummer(0, 0, 0435999999) //043, Wolfhaag
netnummer = netnummer(0, 0, 0485888888) //0485, boxmeer 

functie netnummer(node, nummerIndex, telefoonnummer): string;
begin
  als node.heeftKindMetNummer(telefoonnummer[nummerIndex + 1] dan
    resultaat = resultaat + node.nummer + 
      netnummer(node.kindMetNummer(telefoonnummer[nummerIndex + 1]), nummerIndex + 1, telefoonnummer)
  anders
    stop
   
  geef terug resulaat
eind


Op het moment dat de node geen childs meer heeft is het netnummer gevonden, vervolgens worden alle cijfers van de doorlopen nodes aanelkaar geplakt in resultaat en heb je je netnummer. Hopelijk begrijp je de pseudo code en ben ik niets vergeten. Uiteraard zul je nog wat controle moeten inbakken op bijv. nummerIndex dat deze niet elf wordt (voor NL dan).

Edit: belangrijke controle Het netnummer is alleen geldig als de laatst bereikte node geen childs meer heeft. Heeft de node nog wel childs maar komen alle child-nummers niet overeen met het volgende nummer in je telefoonnummer dan is het nummer niet geldig.

[ Voor 9% gewijzigd door FendtVario op 01-03-2005 19:53 ]

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 18-01 20:02

Cloud

FP ProMod

Ex-moderatie mobster

FendtVario schreef op dinsdag 01 maart 2005 @ 17:08:
* FendtVario had even een brainstorm met zichzelf

maak een boomstructuur van je netnummers waarbij elke node 1 cijfer is. Een klein voorbeeldje voor NL:
[...]
Goede, nette en snelle oplossing denk ik zo :) Boomstructuren zijn vaak erg handig voor dit soort zoekproblemen omdat je jezelf in het aantal if-statements beperkt. :) Nu weet ik alleen niet of Acces (VBA) dit ook kan maken, maar dat zal ongetwijfeld kunnen.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 12-03 15:20
Let er dan ook even op dat duitsland in tegenstelling tot nederland GEEN vaste lengte heeft voor een telefoonnummer!

http://www.dreamsolution.nl


Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 15-04 21:50

FendtVario

The leader drives Vario!

Dat maakt voor deze oplossing niet uit. Als nummerIndex niet groter wordt dan de lengte van het nummer zit je goed. Wordt het wel groter betekent het dat je ergens een fout gemaakt hebt.

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 18-01 20:02

Cloud

FP ProMod

Ex-moderatie mobster

beetle71 schreef op dinsdag 01 maart 2005 @ 17:25:
Let er dan ook even op dat duitsland in tegenstelling tot nederland GEEN vaste lengte heeft voor een telefoonnummer!
Met de hierboven voorgestelde methode moet dat, mits goed geïmplementeerd, geen probleem opleveren :) Hij gaat namelijk net zolang door totdat hij een compleet netnummer gevonden heeft, waarna de rest van de string dus sowieso abonneenummer moet zijn.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 12-03 15:20
Met de hierboven voorgestelde methode moet dat, mits goed geïmplementeerd, geen probleem opleveren :) Hij gaat namelijk net zolang door totdat hij een compleet netnummer gevonden heeft, waarna de rest van de string dus sowieso abonneenummer moet zijn.
/me wilde ook niks zeggen over de hierboven genoemde (tree) oplossing ;)

http://www.dreamsolution.nl


Acties:
  • 0 Henk 'm!

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Voor Nederland heb ik dit wel eens gedaan door een 2-dimensionele matrix te vullen met de lengte van het netnummer. De 'assen' van deze tabel worden benoemd door het tweede en het derde cijfer van het netnummer. Met deze oplossing kun je dus rechtstreeks prikken in een array, veel sneller dan dat zal het niet kunnen gaan, lijkt me zo.

Voor 040 krijg je dus een setting als n=4, y=0, value=3
Voor 0411: n=4, y=1, value=4

Dit kun je natuurlijk ook 6-dimensionaal doen. Het werkt trouwens alleen als je zeker weet dat er geen overlap in netnummers zit, maar dat lijkt me sterk.

With the light in our eyes, it's hard to see.


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Is een boomstructuur hier niet ietsje teveel van het goede?
Ik zou gewoon een platte lijst (tabel) van de netnummers gebruiken.
Dan kun je bv. met een...
code:
1
2
3
select TOP 1 NetNummer from NetNummers
where NetNummer < :TelefoonNummer
order by NetNummer desc
...zien wat het netnummer is.
Krijg je geen resultaat terug, of komt het netnummer niet overeen met de eerste getallen van het telefoonnummer, dan heb je of geen goed telefoonnummer, of geen goede netnummer tabel.

Lijkt me dat Access hier ook wel mee overweg kan... :)

Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 15-04 21:50

FendtVario

The leader drives Vario!

Volgens mij heb je met "of geen goed telefoonnummer" niet helemaal gelijk. Stel je hebt netnummers 010, 0345 en 0346. Telefoonnummer is 0344889900. De uitkomst van de query zal zijn 010 (net ff snel geprobeert in een MySQL Db). Het probleem is dat je in SQL de eerste nummers niet kunt matchen en dat kun je een boomstructuur wel.

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

Anoniem: 14829

of geen goede netnummer tabel. ;)
034 of 0344 (etc.) komen in jouw netnummer lijstje niet voor. Vandaar dat 'ie niet gematcht kan worden.

Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 15-04 21:50

FendtVario

The leader drives Vario!

Ook als je wel een goede netnummerlijst hebt is het niet waterdicht. Men neme de netnummers van Nederland, plaatst deze in een tabel en zoekt het netnummer op voor 0141654321. De query zal 013 teruggeven. Conclusie, fout telefoonnummer, waar hoe weten we dat? Alleen door de eerste nummers te vergelijken.

Dit was ik in mijn eerdere post vergeten nog een belangrijke controle vergeten. Zie de edit.

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Zei ik toch? "of komt het netnummer niet overeen met de eerste getallen van het telefoonnummer"
Of ik snap jouw probleem niet, of jij snapt mijn oplossing niet...

Ervan uitgaande dat de netnummerlijst die je aangeeft klopt, en er dus niks tussen 013 en 015 zit, is 014....... doodgewoon een ongeldig nummer.

Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 15-04 21:50

FendtVario

The leader drives Vario!

Ik snap je wel, het probleem met de query is dat deze altijd 1 antwoord teruggeeft terwijl de functie netnummer() dit niet hoeft te doen.

[ Voor 17% gewijzigd door FendtVario op 01-03-2005 21:35 ]

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Dan wrap je die query toch in een functie? :?
Stukje Delphi, voor na het openen van die query:
Delphi:
1
2
3
4
if (not EOF) and (Pos(FieldByName('NetNummer').AsString, TelefoonNummer) = 1) then
  Result := FieldByName('NetNummer').AsString
else
  Result := '';

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 14-04 17:27
* MSalters heeft wel eens gewerkt aan telefooncentrales zoals KPN die gebruikt en kan verzekeren dat elk netnummer een unieke prefix is. De reden is simpel: Het kostte botweg teveel geheugen om elk telefoonnummer in Nederland in elke centrale te hebben (die dingen stammen uit 1980, en elk nummer zit dus in RAM. Reken maar uit). De oplossing was om alleen lokale nummers te hebben; zodra je een nummer beginnend met 0 kreeg zocht je de prefix op in de tabel met verbindingen. Dat werkt dus alleen als ene prefix uniek is. Dan kon je vervolgens de volgende cijfers als lokaal nummer naar die centrale sturen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 15-04 21:50

FendtVario

The leader drives Vario!

@Afterlife; dat bedoelde ik dus.

Edit: het is alleen de vraag welke methode efficienter is. De boom inlezen en bouwen kost ook de nodige inspanning terwijl een tabel zo gevuld en uitgelezen is.

[ Voor 72% gewijzigd door FendtVario op 01-03-2005 22:10 ]

www.fendt.com | Nikon D7100 | PS5


Acties:
  • 0 Henk 'm!

Anoniem: 14829

Geloof me, in een normale client/server situatie met een beetje leuke database (ik heb het meest ervaring met InterBase en MSSQL) is die 'platte tabel' benadering een stuk sneller. En je hoeft die boom dan ook niet in het geheugen van de client op te bouwen.

Voor de nederlandse netnummers kost het opbouwen van zo'n boom niet zoveel, maar voor duitsland of frankrijk wordt 't al wat pittiger.
En wanneer je 't dan uit wilt breiden naar een 'least cost routing' tabel waarbij je ook internationale nummers mee wilt nemen, dan is 't toch wel handig wanneer je de boel aan de database kunt overlaten... ;)
Pagina: 1