/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
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

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste