Avatar billede trillo Nybegynder
25. marts 2008 - 22:35 Der er 6 kommentarer og
1 løsning

Et loop som bestemmer om teksten er for lang

Jeg sidder og roder lidt med ASP vb script, og til det ville jeg lave et loop som ser om en string er for lang til at kunne være der.
så jeg lavede et loop, men jeg får type mismatch fejl.
så hvis nogle kunne se fejlen eller fortælle en bedre metode ville jeg blive glad :D

Kode:
<%
Dim nstringArr()
Dim Txt
Dim X
Dim Z
       
Txt = "Bah"                   
X = 1
ReDim nstringArr(Len(Txt))
For X = 1 To Len(Txt)
nstringArr(X) = Mid(Txt, X, 1)
Next
'Deler stringen op i et array

X = 0
For Y = 1 To Len(Txt)
set rs = conn.Execute("Select width From chars Where letter ='" & nstringArr(Y) & "'")
X + CInt(rs("width"))
Z + 1
If X > 150 Then Exit For End If
Next
'Tjekker om stringen er for lang
                   
Response.Write(Mid(Txt, 1, Z))
If X > 150 Then
Response.Write("...")
End If
' Skriver Z bogstaver fra arrayet og afslutter med et "..." hvis string er for lang.
%>
Avatar billede softspot Forsker
25. marts 2008 - 22:42 #1
Øøh, vil du bare kontrollere om strengen er længere end 150 tegn og i så fald afkorte den til 150 tegn med ... efter?

I så fald ville jeg foreslå denne løsning:

txt = "---den streng som skal kontrolleres---"
if len(txt) > 150 then
  txt = left(txt) & "..."
end if
Avatar billede softspot Forsker
25. marts 2008 - 22:43 #2
Æhm... sorry... var vist lidt hurtig på aftrækkeren der. :$
Avatar billede softspot Forsker
25. marts 2008 - 22:49 #3
Helt konkret er dit problem (et af dem), at du arrays er nulbaserede og du looper fra 1 til længden af strengen. Det giver to problemer, første tegn medregnes ikke og du indekserer for langt i arrayet (dvs. du kommer "out of bounds"). Du kan vælge at justere din løkke, så den itererer fra 0 til ubound(nstringArr), altså:

For Y = 0 To ubound(nstringArr)

eller du kan droppe arrayet helt og bare benytte mid til at aflæse det tegn der skal hentes bredde på. Der er nok en helt tredie løsning (mere kompleks), som kunne løse dit problem mere effektivt ved større strenglængder, men den tror jeg lige får lov til at vente...
Avatar billede softspot Forsker
25. marts 2008 - 22:56 #4
Nå, ved tredie gennemsyn, lader det til at det ikke er din indeksering der er noget galt med, da dit array er dimensioneret efter længden af strengen (plus det nulte indeks). Det er nok snarere din inkrementering af X og Z der fejler. Jeg har kombineret rettelsen med den løsning hvor arrayet er droppet. Det må se nogenlunde således ud:

<%
Dim Txt
Dim X
Dim Z
       
Txt = "Bah"                   
X = 0
For Y = 1 To Len(Txt)
  set rs = conn.Execute("Select width From chars Where letter ='" & mid(txt,y,1) & "'")
  X = X + CInt(rs("width"))
  Z = Z + 1
  If X > 150 Then Exit For End If
Next
'Tjekker om stringen er for lang
                   
Response.Write(Mid(Txt, 1, Z))
If X > 150 Then
  Response.Write("...")
End If
' Skriver Z bogstaver fra arrayet og afslutter med et "..." hvis string er for lang.
%>
Avatar billede trillo Nybegynder
26. marts 2008 - 16:31 #5
Det virker, mange tak :D
og det er også dejligt at du har kortet koden ned

smid et svar og du får dine points :)

<3
Avatar billede softspot Forsker
26. marts 2008 - 16:49 #6
Velbekomme :)
Avatar billede softspot Forsker
27. marts 2008 - 15:54 #7
Tak for point :)
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