25. marts 2008 - 22:35Der 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. %>
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...
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. %>
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.