|
| Formattering af telefonnumre? Fra : Jørn Andersen |
Dato : 13-09-05 10:06 |
|
Hej,
Hvordan formatterer man nemmest telefonnumre, så de står som talpar
med et mellemrum mellem hvert par?
Altså:
12345678 -> 12 34 56 78
Jeg synes det er noget snavs at have mellemrummene stående i
databasen, da man er for afhængig af, at alle indtatser korrekt.
På forhånd tak,
Jørn
--
Jørn Andersen,
Brønshøj
| |
Thomas Damgaard Niel~ (13-09-2005)
| Kommentar Fra : Thomas Damgaard Niel~ |
Dato : 13-09-05 11:24 |
|
Jørn Andersen wrote:
> 12345678 -> 12 34 56 78
Se på funktionerne Mid[1] og Len[2]
[1]: Mid(string,start[,length])
[2]: Len(string|varname)
> Jeg synes det er noget snavs at have mellemrummene stående i
> databasen, da man er for afhængig af, at alle indtatser korrekt.
Det er man vel altid afhængig af.
--
Thomas Damgaard Nielsen
http://thomasdamgaard.dk/
Svar venligst under det du citerer. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Jørn Andersen (13-09-2005)
| Kommentar Fra : Jørn Andersen |
Dato : 13-09-05 11:46 |
|
On Tue, 13 Sep 2005 12:24:04 +0200, Thomas Damgaard Nielsen
<tdn.usenet@gmail.com> wrote:
>Jørn Andersen wrote:
>> 12345678 -> 12 34 56 78
>
>Se på funktionerne Mid[1] og Len[2]
>
>[1]: Mid(string,start[,length])
>[2]: Len(string|varname)
Ja, det var også i den retning, mine evner rakte:
Function fktFormatTlfnummer(varTlfnr)
Dim strTlfNy, a
For a = 1 To 7
strTlfNy = strTlfNy & Mid(varTlfnr, a, 2) & " "
a = a + 1
Next
fktFormatTlfnummer = Trim(strTlfNy)
End Function
- men det kunne måske gøres smartere?
>> Jeg synes det er noget snavs at have mellemrummene stående i
>> databasen, da man er for afhængig af, at alle indtatser korrekt.
>
>Det er man vel altid afhængig af.
Selvklart - men folk synes vel at de har gjort det korrekt, når de
rigtige cifre står der, mens det føles som "noget ekstra", hvis der
samtidig skal formatteres på en bestemt måde.
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
terje hauger (13-09-2005)
| Kommentar Fra : terje hauger |
Dato : 13-09-05 14:28 |
|
Jørn Andersen wrote:
> - men det kunne måske gøres smartere?
Din funksjon er helt ok.
terje
| |
Jens Gyldenkærne Cla~ (13-09-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 13-09-05 15:04 |
|
Jørn Andersen skrev:
> - men det kunne måske gøres smartere?
Jo da - med et regulært udtryk. Jeg bruger nedenstående funktion:
Function formatTlf(nr)
If isnull(nr) Then
formatTlf = ""
Else
Dim rgx
Set rgx = New RegExp
rgx.Pattern =
"^\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*(\d)\s*$"
formatTlf = rgx.Replace(nr, "$1$2 $3$4 $5$6 $7$8")
End If
End Function
Den udskriver en tom streng hvis inddata er null, formaterer et 8-
cifret telefonnummer som aa bb cc dd uanset hvad der i øvrigt er
brugt af mellemrum i opstillingen, og endelig lader den
telefonnumre med flere eller færre end 8 cifre stå som de er.
Den kan godt udbygges til fx at fjerne "+45" foran et nummer, rette
00XX til +XX i starten af et nummer, arbejde med formatet +XX aa bb
cc dd etc. - men ovenstående er hvad jeg har haft brug for indtil
nu.
Hvis man ved at der ikke er mellemrum mærkelige steder i databasen,
kan man bruge følgende mere simple udgave:
Function formatTlfSimple(nr)
If isnull(nr) Then
formatTlf = ""
Else
Dim rgx
Set rgx = New RegExp
rgx.Pattern = "^(\d{2})(\d{2})(\d{2})(\d{2})$"
formatTlfSimple = rgx.Replace(nr, "$1 $2 $3 $4")
End If
End Function
Den retter kun numre der står som aabbccdd (8 cifre i rap).
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
terje hauger (13-09-2005)
| Kommentar Fra : terje hauger |
Dato : 13-09-05 16:44 |
|
Jens Gyldenkærne Clausen wrote:
> Jørn Andersen skrev:
>
>
>>- men det kunne måske gøres smartere?
>
>
> Jo da - med et regulært udtryk. Jeg bruger nedenstående funktion:
He, he. Jeg vurderte faktisk å skrive:
Din funksjon er helt ok. Snart kommer Jens med en RegEx løsning
terje
| |
Jørn Andersen (13-09-2005)
| Kommentar Fra : Jørn Andersen |
Dato : 13-09-05 21:55 |
|
On Tue, 13 Sep 2005 16:03:35 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:
>Jørn Andersen skrev:
>
>> - men det kunne måske gøres smartere?
>
>Jo da - med et regulært udtryk.
Mange tak - på et eller andet tidspunkt *må* jeg altså få sat mig ind
i, hvordan de dersens RegEx virker. Foreløbig er det (næsten) volapyk
for mig
Men det udløser så lige et følge-spørgsmål: Hvilken af de to løsninger
er mindst ressource-forbrugende? Eller er forskellen så minimal, at
den drukner i alle mine andre "uhensigtsmæssigheder"?
Jeg mener at have lært engang, at objekter (RegEx er måske ikke den
værste?) bruger forholdsvis mange ressourcer. Til gengæld kan sige, at
jeg har flere variable, og at jeg kører en (godt nok minimal) loop.
Nogen bud?
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
Jens Gyldenkærne Cla~ (13-09-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 13-09-05 18:26 |
|
terje hauger skrev:
> Din funksjon er helt ok. Snart kommer Jens med en RegEx
> løsning
Hæ - jeg har vist været for længe i denne gruppe
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
pepss (13-09-2005)
| Kommentar Fra : pepss |
Dato : 13-09-05 19:45 |
|
"Jens Gyldenkærne Clausen" skrev
> terje hauger skrev:
>
>> Din funksjon er helt ok. Snart kommer Jens med en RegEx
>> løsning
>
> Hæ - jeg har vist været for længe i denne gruppe
ikke "for" længe! jeg tor vi er mange der har lært den DEL af din til
stædeværlse! så bare bliv på din pind
--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk
De frække noveller www.novelle.cafe-flirt.dk
| |
Johnny Winther Ronne~ (15-09-2005)
| Kommentar Fra : Johnny Winther Ronne~ |
Dato : 15-09-05 18:18 |
|
In news:<Xns96D0C5C3777ABjcdmfdk@gyrosmod.cybercity.dk>
Jens Gyldenkærne Clausen typed:
> terje hauger skrev:
>
>> Din funksjon er helt ok. Snart kommer Jens med en RegEx
>> løsning
>
> Hæ - jeg har vist været for længe i denne gruppe
Mon ikke det kan løse med en RegEx?
Med venlig hilsen
Johnny Winther Ronnenberg
--
Internettet er for alle!
http://80.62.61.212/webuseability/index.asp
| |
Jens Gyldenkærne Cla~ (14-09-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 14-09-05 00:45 |
|
Jørn Andersen skrev:
> Mange tak - på et eller andet tidspunkt *må* jeg altså få sat
> mig ind i, hvordan de dersens RegEx virker.
Det kan kun anbefales. Der er mange anvendelsesområder.
> Men det udløser så lige et følge-spørgsmål: Hvilken af de to
> løsninger er mindst ressource-forbrugende?
Jeg har netop testet det. Baseret på de tre funktioner der har
været oppe her, og en løkke med 50'000 kald (fortløbende 8-cifrede
numre uden mellemrum), vinder din løkkebaserede model klart (1
sekund mod 19-20 sekunder).
Men man kan jo putte oprettelsen af objektet uden for selve
funktionen:
Dim rgx
Set rgx = New RegExp
rgx.Pattern = "^(\d{2})(\d{2})(\d{2})(\d{2})$"
Function formatTlfSimple(nr)
If isnull(nr) Then
formatTlfSimple = ""
Else
formatTlfSimple = rgx.Replace(nr, "$1 $2 $3 $4")
End If
End Function
- så er den straks noget hurtigere.
Nu skal jeg op på 500'000 kald for at få nogle forskelle der ikke
bare handler om afrundinger - 10 sekunder til den "store" regex-
løsning, 8 sekunder til den simple regex-løsning og 7 sekunder til
løkkeløsningen.
> Jeg mener at have lært engang, at objekter (RegEx er måske
> ikke den værste?) bruger forholdsvis mange ressourcer. Til
> gengæld kan sige, at jeg har flere variable, og at jeg kører
> en (godt nok minimal) loop.
Det er i hvert fald tydeligt at det er en tung sag at oprette
objekter - og det bør nok undgås hvis man har mulighed for at
genbruge et objekt.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Jørn Andersen (14-09-2005)
| Kommentar Fra : Jørn Andersen |
Dato : 14-09-05 02:29 |
|
On Wed, 14 Sep 2005 01:44:41 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:
>Jørn Andersen skrev:
>> Men det udløser så lige et følge-spørgsmål: Hvilken af de to
>> løsninger er mindst ressource-forbrugende?
- og havde nok forventet et svar i retning af "på den ene side, på den
anden side ..." - men hvad kom der? Selvfølgelig:
>Jeg har netop testet det.
Konklusionen er jo ret klar: Så længe der er tale om få visninger er
der ikke noget problem, men ellers skal man lige tænke en gang.
Men jeg kom så til at tænke på:
Skal et RegExp-obj. ikke sættes = Nothing efter brug?
Og hvordan vil det påvirke performance, hvis man fortsat lader obj.
blive oprettet og destrueret i funktionen?
Til slut lige et RegExp-spørgsmål.
Jeg var ved at læse så meget, at jeg i det mindste kunne forstå dit
pattern, men:
Er det rigtigt forstået, at paranteserne i fx:
>rgx.Pattern = "^(\d{2})(\d{2})(\d{2})(\d{2})$"
er dem, der bliver til $1 $2 osv. i:
> rgx.Replace(nr, "$1 $2 $3 $4")
- ?
De bedste hilsner,
Jørn
--
Jørn Andersen,
Brønshøj
| |
Jens Gyldenkærne Cla~ (14-09-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 14-09-05 02:55 |
|
Jørn Andersen skrev:
> Men jeg kom så til at tænke på:
> Skal et RegExp-obj. ikke sættes = Nothing efter brug?
Jo - det bør det vel lige som alle andre objekter. Det kan ske inde
i funktionen eller efter det sidste kald til funktionen, hvis
objektet er globalt.
> Og hvordan vil det påvirke performance, hvis man fortsat lader
> obj. blive oprettet og destrueret i funktionen?
Det vil jeg overveje at teste når jeg har fået sovet lidt ,-)
> Er det rigtigt forstået, at paranteserne i fx:
>>rgx.Pattern = "^(\d{2})(\d{2})(\d{2})(\d{2})$"
>
> er dem, der bliver til $1 $2 osv. i:
>> rgx.Replace(nr, "$1 $2 $3 $4")
Bingo. Paranteserne opretter match-grupper, som man så kan referere
til i en erstatning.
\d er en tegnklasse der matcher tal ([0-9]).
{2} betyder at det der står lige foran (altså her et ciffer), skal
forekomme 2 gange - hverken mere eller mindre.
Endelig betyder ^ forrest og $ bagerst at der skal matches på hele
strengen (^ betyder at et match skal starte fra begyndelsen af
strengen, og $ betyder at matchet skal slutte samme sted som
strengen.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
|
|