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

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Sammenligning af strenge
Fra : Carsten Jessen


Dato : 08-05-01 20:07

Hej
Er det muligt at se bort fra om bogstaver er store eller små når man
sammenligner 2 strenge?

fx.
AbCd = abcd
AbCd = abCd
AbCd = ABCD
osv.

MVH Carsten



 
 
Helge Bjørkhaug (08-05-2001)
Kommentar
Fra : Helge Bjørkhaug


Dato : 08-05-01 20:48

Carsten Jessen <c.je@get2net.dk> skrev i
news:9sXJ6.1119$h4.188969@news101.telia.com
> Hej
> Er det muligt at se bort fra om bogstaver er store eller små når man
> sammenligner 2 strenge?
>
> fx.
> AbCd = abcd
> AbCd = abCd
> AbCd = ABCD
> osv.

Ucase(AbCd) = Ucase(abcd)

--
Snutten



Carsten Jessen (08-05-2001)
Kommentar
Fra : Carsten Jessen


Dato : 08-05-01 21:45

Tak.

"Helge Bjørkhaug" <helge@techie.online.no> skrev i en meddelelse
news:G6YJ6.5497$Ty6.124042@news1.oke.nextra.no...
> Carsten Jessen <c.je@get2net.dk> skrev i
> news:9sXJ6.1119$h4.188969@news101.telia.com
> > Hej
> > Er det muligt at se bort fra om bogstaver er store eller små når man
> > sammenligner 2 strenge?
> >
> > fx.
> > AbCd = abcd
> > AbCd = abCd
> > AbCd = ABCD
> > osv.
>
> Ucase(AbCd) = Ucase(abcd)
>
> --
> Snutten
>
>



Niels (09-05-2001)
Kommentar
Fra : Niels


Dato : 09-05-01 06:33

En lille kommentar.

Når man arbejder med strenge, findes der typisk to udgaver
af de forskellige funktioner. Så som Ucase() og Ucase$().
Hvor Ucase() returnere en Variant af typen streng og Ucase$()
returnere en streng. Variant variablen er betydeligt langsommer
en strenge, så brug Ucase$() det giver en bedre performance.

- Niels


"Helge Bjørkhaug" <helge@techie.online.no> wrote in message
news:G6YJ6.5497$Ty6.124042@news1.oke.nextra.no...
> Carsten Jessen <c.je@get2net.dk> skrev i
> news:9sXJ6.1119$h4.188969@news101.telia.com
> > Hej
> > Er det muligt at se bort fra om bogstaver er store eller små når man
> > sammenligner 2 strenge?
> >
> > fx.
> > AbCd = abcd
> > AbCd = abCd
> > AbCd = ABCD
> > osv.
>
> Ucase(AbCd) = Ucase(abcd)
>
> --
> Snutten
>
>



Tomas Christiansen (10-05-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 10-05-01 08:36

Niels skrev:
> Variant variablen er betydeligt langsommer en strenge,
> så brug Ucase$() det giver en bedre performance.

Jeg kom til at tænke på hvor stor forskel der mon egentlig er på UCase og
UCase$ mht. performance, og forsøgte mig med en simpel test:

For i = 1 To 1000000
s2 = s1 'TestA
s2 = UCase$(s1) 'TestB
s2 = UCase(s1) 'TestC
Next i

Først kørte jeg med linien TestA aktiveret (dvs. at de to øvrige linier
TestB og TestC var kommenteret ud) og kom til det resultate at det tog 320
ms.
TestB tog 1056 ms og TestC tog 1205 ms.

Hvis vi antager at differencen mellem tiden TestB - TestA er den tid som det
tog at udføre UCase$ præcis 1000000 gange (TestA er jo den tid det tager at
foretage en strengtildeling og tælle i op præcis 1000000 gange), kan vi
bruge tiderne:

TestB - TestA = 736 ms
TestC - TestA = 885 ms

som udtryk for hvor meget overhead der er ved at bruge UCase frem for
UCase$.

Med andre ord er UCase$ (100 - 736 / 885 * 100) = 16,8 % hurtigere end UCase
i ovennævnte test.

Så kan man selv fundere over om det er værd at "gå efter".

-------
Tomas





Helge Bjørkhaug (10-05-2001)
Kommentar
Fra : Helge Bjørkhaug


Dato : 10-05-01 09:07

"Tomas Christiansen" <toc@blikroer.dk.removethis> skrev i melding
news:dxrK6.21$qY.2054@news.get2net.dk...
> Niels skrev:
> > Variant variablen er betydeligt langsommer en strenge,
> > så brug Ucase$() det giver en bedre performance.
>
> Jeg kom til at tænke på hvor stor forskel der mon egentlig er på UCase og
> UCase$ mht. performance, og forsøgte mig med en simpel test:
>
> For i = 1 To 1000000
> s2 = s1 'TestA
> s2 = UCase$(s1) 'TestB
> s2 = UCase(s1) 'TestC
> Next i
>
> Først kørte jeg med linien TestA aktiveret (dvs. at de to øvrige linier
> TestB og TestC var kommenteret ud) og kom til det resultate at det tog 320
> ms.
> TestB tog 1056 ms og TestC tog 1205 ms.
>
> Hvis vi antager at differencen mellem tiden TestB - TestA er den tid som
det
> tog at udføre UCase$ præcis 1000000 gange (TestA er jo den tid det tager
at
> foretage en strengtildeling og tælle i op præcis 1000000 gange), kan vi
> bruge tiderne:
>
> TestB - TestA = 736 ms
> TestC - TestA = 885 ms
>
> som udtryk for hvor meget overhead der er ved at bruge UCase frem for
> UCase$.
>
> Med andre ord er UCase$ (100 - 736 / 885 * 100) = 16,8 % hurtigere end
UCase
> i ovennævnte test.
>
> Så kan man selv fundere over om det er værd at "gå efter".

Ja, tidsforskjellen på hver "loop" skulle da være 0,0001486 ms
Og det skulle vel ikke være veldig plagsomt
_Men_, teorien om at Ucase$ er raskere, er helt riktig!
Og man bør tilstrebe at skrive så optimale programmer som mulig,
selv om "effekten" av det blir mindre og mindre i takt med raskere og
raskere PC'er.

--
Snutten



Niels (13-05-2001)
Kommentar
Fra : Niels


Dato : 13-05-01 13:54


"Helge Bjørkhaug" <snutten@techie.online.no> wrote in message
news:G_rK6.259$P2.179148288@news.telia.no...
> "Tomas Christiansen" <toc@blikroer.dk.removethis> skrev i melding
> news:dxrK6.21$qY.2054@news.get2net.dk...
> > Niels skrev:
> > > Variant variablen er betydeligt langsommer en strenge,
> > > så brug Ucase$() det giver en bedre performance.
> >
> > Jeg kom til at tænke på hvor stor forskel der mon egentlig er på UCase
og
> > UCase$ mht. performance, og forsøgte mig med en simpel test:
> >
> > For i = 1 To 1000000
> > s2 = s1 'TestA
> > s2 = UCase$(s1) 'TestB
> > s2 = UCase(s1) 'TestC
> > Next i
> >
> > Først kørte jeg med linien TestA aktiveret (dvs. at de to øvrige linier
> > TestB og TestC var kommenteret ud) og kom til det resultate at det tog
320
> > ms.
> > TestB tog 1056 ms og TestC tog 1205 ms.
> >
> > Hvis vi antager at differencen mellem tiden TestB - TestA er den tid som
> det
> > tog at udføre UCase$ præcis 1000000 gange (TestA er jo den tid det tager
> at
> > foretage en strengtildeling og tælle i op præcis 1000000 gange), kan vi
> > bruge tiderne:
> >
> > TestB - TestA = 736 ms
> > TestC - TestA = 885 ms
> >
> > som udtryk for hvor meget overhead der er ved at bruge UCase frem for
> > UCase$.
> >
> > Med andre ord er UCase$ (100 - 736 / 885 * 100) = 16,8 % hurtigere end
> UCase
> > i ovennævnte test.
> >
> > Så kan man selv fundere over om det er værd at "gå efter".
>
> Ja, tidsforskjellen på hver "loop" skulle da være 0,0001486 ms
> Og det skulle vel ikke være veldig plagsomt
> _Men_, teorien om at Ucase$ er raskere, er helt riktig!
> Og man bør tilstrebe at skrive så optimale programmer som mulig,
> selv om "effekten" av det blir mindre og mindre i takt med raskere og
> raskere PC'er.
>
> --
> Snutten

Argumentet med at, hurtiger maskiner får "effekten" til at ha' mindre
betydning. Mener jeg er forkert, da størrelsen på programmer også stiger
og mængden af data der skal behandles også stiger.

Hvis man arbejder med systemer der skal kunne skaleres, vil man også
opdage at man ikke (altid) kan løse skalerings problemet bare ved at
købe en hurtigere maskine. Et program/system der skal kunne skaleres
kræver et godt design og optimerede programmer.

- Niels G.




Tomas Christiansen (08-05-2001)
Kommentar
Fra : Tomas Christiansen


Dato : 08-05-01 22:16

Carsten Jessen skrev:
> Er det muligt at se bort fra om bogstaver er store eller små når man
> sammenligner 2 strenge?

Der er flere måde at klare den sag på.

1. Du kan bruge Option Compare Text, som gør at ALLE sammenligninger i det
pågældende modul er ikke-case-sensitive.
Herefter vil If "abc" = "ABC" altid returnere sand.
2. VB har en indbygget funktion StrComp, som er beregnet til dette.
Bruges f.eks. StrComp("abc", "DEF", vbTextCompare) returneres værdien -1
idet "abc" er mindre end "DEF".
3. Du kan bruge UCase (eller LCase) som Helge foreslog.

-------
Tomas



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

Månedens bedste
Årets bedste
Sidste års bedste