Avatar billede meyer Nybegynder
15. april 2008 - 15:21 Der er 9 kommentarer og
1 løsning

Skille ved mellemrum

Jeg skal trække en overskrift ud fra min db.. skille den ved alle mellemrum og skrive dem med hver sin farve hver gang der har været et mellemrum - hvordan gør jeg det?
Avatar billede w13 Novice
15. april 2008 - 15:32 #1
aText="ord med mellemrum"
aText=Split(aText," ")

sColor=""
For i=0 To UBound(aText)
  If sColor="" Then sColor="ff0000" Else sColor="00ff00"
  Response.Write "<span style=""color:#"&sColor&";"">"&aText(i)&"</span> "
Next
aText=null
Avatar billede w13 Novice
15. april 2008 - 15:35 #2
Med funktionen Split(string, " ") deles der ved mellemrum og alle ordene bliver smidt i et array, som vi kan gennemløbe i for-løkken.
Avatar billede softspot Forsker
15. april 2008 - 15:38 #3
Skal hvert ord vises med en ny farve eller skal de bare veksle mellem to forskellige farver? Anyway! Så kan du bruge split og så udskrive dem igen med farvekodevalg omkring. Eksempelvis:

arrColors = array("red", "blue")
arrWord = split(overskrift, " ")
for each w in arrWord
  response.write "<span style=""color:" & arrColors(i mod 2) & """>" & w & "</span> "
next
Avatar billede meyer Nybegynder
15. april 2008 - 19:14 #4
w13>> Tak endnu engang :-? fik den til at køre sådan her:

<%
aText="ord med mellemrum"
aText=Split(aText," ")

sColor="ff0000"
For i=0 To UBound(aText)
  Response.Write "<span style=""color:#" & sColor&";"">" & aText(i) &"</span> "
If sColor="00ff00" Then sColor="ff0000" Else sColor="00ff00"
Next
aText=null
%>
Avatar billede w13 Novice
15. april 2008 - 19:18 #5
Og tak for point! :)
Avatar billede softspot Forsker
15. april 2008 - 20:38 #6
Nå, jeg synes ellers lige min løsning var så fiks... ;D
Avatar billede w13 Novice
15. april 2008 - 21:01 #7
softspot>> Din modulus-løsning med farverne i arrayet er klart at foretrække.
Dog performer en for-each betydeligt dårligere end en normal for-to-løkke.

Så koden kunne blive:

<%
aText=Split("ord med mellemrum"," ")
aColor=array("#00ff00","#ff0000")

For i=0 To UBound(aText)
  Response.Write "<span style=""color:"&aColor(i mod 2)&""">"&aText(i)&"</span> "
Next
aText=null
aColor=null
%>
Avatar billede softspot Forsker
15. april 2008 - 21:43 #8
w13 >> Aaah, det lyder som en udfordring :D

Først og fremmest synes jeg måske et er lidt noget pjat at snakke om performance, når antallet af gennemløb er så små, som tilfældet er her, men lad os nu sige at der rent faktisk var lidt køb på det array, så kunne det jo være interessant nok, at vide om den ene eller den anden metode var bedst.

Jeg har derfor flikket et script sammen for at teste om der er forskel og de første resultater tyder på at det forholder sig lige nøjagtig modsat af hvad du siger, dvs. for each performer (marginalt, dvs. ca 15%) bedre end for-to løkken. Jeg er dog åben overfor (konstruktiv) kritik af mit testscript, hvis du skulle mene der er mangler som fordrejer resultatet. Scriptet itererer løkkerne 1.000.000 gange hver, først indekseret, derefter enumereret og så i omvendt (enumereret og derefter indekseret), for at se om det har nogen betydning hvilken rækkefølge løkkerne køres i. Det ser således ud:

<%
const MAX_LIMIT = 999999
dim a(999999), ts, tm, te

' Fyld et array med værdier...
for i = 0 to MAX_LIMIT
  a(i) = i
next

' start testen af indekseret løkke
ts = timer

for i = 0 to MAX_LIMIT
  b = a(i)
next

' tag en mellemtid og start dernæst en test af enumereret løkke
tm = timer

for each b in a
  c = b
next

' aflæs sluttiden
te = timer

' skriv nogle resultater
response.write "indekseret løkke: " & tm-ts & " sekunder<br>"
response.write "enumereret løkke: " & te-tm & " sekunder<br>"
response.flush

' kør testen i omvendt rækkefølge for at se om det har nogen betydning for resultatet
' start testen af enumereret løkke
ts = timer

for each b in a
  c = b
next

' tag en mellemtid og start dernæst en test af indekseret løkke
tm = timer

for i = 0 to MAX_LIMIT
  b = a(i)
next

' aflæs sluttiden
te = timer

' skriv nogle resultater
response.write "indekseret løkke: " & te-tm & " sekunder<br>"
response.write "enumereret løkke: " & tm-ts & " sekunder<br>"
%>
Avatar billede w13 Novice
15. april 2008 - 23:10 #9
Der kan man bare se. =) Jeg gik ud fra, at det også gjaldt ASP, når det gjaldt så mange andre sprog, men endnu engang skiller ASP sig ud.
Avatar billede softspot Forsker
15. april 2008 - 23:23 #10
Denne test omhandler kun array, jeg har ikke testet på en collection, så der kan være noget med for each og collections - dog tror jeg ikke det er tilfældet. Jeg synes at kunne huske, fra tidligere erfaring med VB 6, at enumereret tilgang til en collection også her er hurtigere end indekseret (velsagtens fordi collections vedligeholder en kæde af objekter, hvor en enumerator har fat i et objekt, hvortil det næste kan findes via kæden, hvorimod en indeksering skal gennemløbe hele kæden hver gang et objekt skal udtages).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester