webForumDet fria alternativet

Stöta på tecken - Gör detta

ASP

15 svar · 353 visningar · startad av LeonL

Medlem sedan dec. 20025 871 inlägg
Frågan#1

Nej jag visste inte hur jag skulle formulera rubriken :p
Till min fråga:

Hur ska jag göra för att gå igenom en sträng (från en textarea) för att leta efter vbCrlf?

Jag vill att för varje gång den hittar ett vbCrlf så ska den göra något som kommer att ta några rader, och dessutom vill jag att den då ska lägga till 1 på ett tal. Detta går ju knappast att lösa med Replace ... eller RegExp...

Ex:

Om den hittar en vbCrlf ska den göra detta:
x = x + 1
' plus en massa andra koder

Kan man lösa det på något smidigt sätt?

Medlem sedan dec. 20003 887 inlägg
#2

Jo, med RegExp går det ju utmärkt...

Sub FindVbCrLf(strSource)
  Set objRX = New RegExp
  objRX.Global = True
  objRX.Pattern = "\n"

  Set objMatches = objRX.Matches(strSource)

  For Each Match In objMatches
    [blue]'Do stuff... exempelvis x = x + 1[/blue]
  Next
End Sub
Medlem sedan dec. 20025 871 inlägg
#3

Jo... jag är ju inte så van vid RegExp så :r

Tack ;)

Medlem sedan dec. 20025 871 inlägg
#4

Microsoft VBScript runtime error '800a01b6'
Object doesn't support this property or method: 'Matches'

/test.asp, line 19

    Set objMatches = objRX.Matches(strSource)

Tydligen är det felstavat eller något, men jag kan itne komma på vad som är felstavat :p

En annan fråga:
Jag vill att den ska skriva ut värdet.. men när den stöter på vbCrlf ska den stanna och köra lite koder, sedan vill jag att den ska fortsätta så... Hur gör jag då?

Medlem sedan dec. 200012 464 inlägg
#5
 
Set objMatches = objRX.execute(strSource)
Medlem sedan dec. 20025 871 inlägg
#6

Perfekt LarsG...

Jag kan formulera om min andra fråga... Jag håller på med ett sagoscript och jag vill att för varje radbrytning ska den lägga till en del TD- och TR-taggar... Jag vill alltså ha sagan fint uppdelad. Dessutom vill jag skriva in radnummret också... Förstår ni vad jag menar?

Medlem sedan dec. 200012 464 inlägg
#7

Det torde inte vara något problem. Varje match-objekt innehåller attributet firstindex som anger var vbcrlf hittades.


Sub FindVbCrLf(strSource)
   dim p
  Set objRX = New RegExp
  objRX.Global = True
  objRX.Pattern = "\n"

  Set objMatches = objRX.Matches(strSource)
 p = 0
 x = 0
  For Each Match In objMatches
    'Do stuff... exempelvis x = x + 1
      x = x + 1
      response.write x 'radnummer och andra formatteringar
'skriv text utan vbcrlf
     response.write substring(strSource,p+1,match.firstindex-p)
     p = p + match.firstindex + match.length
   response.write "" 'övriga formatteringar
  Next
End Sub

Ungefär så

Medlem sedan dec. 20025 871 inlägg
#8

Perfekt ;) Tackar...

Medlem sedan dec. 20025 871 inlägg
#9

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'substring'

:OO Hur förklarar du detta då? :)

Medlem sedan dec. 200012 464 inlägg
#10

Debugga

Lägg till lite testutskrifter så du ser vilka värden som variablerna får efterhand

Sub FindVbCrLf(strSource)
   dim p
  Set objRX = New RegExp
  objRX.Global = True
  objRX.Pattern = "\n"

  Set objMatches = objRX.execute(strSource)
 p = 0
 x = 0
  For Each Match In objMatches
    'Do stuff... exempelvis x = x + 1
      x = x + 1
      response.write x 'radnummer och andra formatteringar
'skriv text utan vbcrlf
     response.write "Debug p:"  & p
     response.write "Debug firstindex:"  & match.firstindex
     response.write "Debug length:"  & match.length
     response.write substring(strSource,p+1,match.firstindex-p)
     p = p + match.firstindex + match.length
   response.write "" 'övriga formatteringar
  Next
End Sub
Medlem sedan dec. 20025 871 inlägg
#11

Värdena jag var 0, 31 och 1

Dumt script skrev:

Debug p:0
Debug firstindex:31
Debug length:1

Ska experimentera lite :)

Medlem sedan dec. 20025 871 inlägg
#12

Hittar inte något om RegExp på MSDN... vet nån var det finns?

red\ Har hittat det... behövs nite :)

Medlem sedan dec. 20025 871 inlägg
#13

Hur funkar Substring? Har aldrig använt det... liknar det Mid()?

Medlem sedan dec. 20003 887 inlägg
#14

Jag antar att LarsG menar Mid(), eftersom substring inte finns i VBScript.

RegExp Object

Medlem sedan dec. 200012 464 inlägg
#15

Jag menar nog mid ja.

1-1

Medlem sedan dec. 20025 871 inlägg
#16

Tänkte väl det.. har för mig att substr finns i Jscript.. eller nåt :p

Men det är nog något fel med talen för jag får detta felmeddelande:

Microsoft VBScript runtime error '800a0005'

Invalid procedure call or argument: 'Mid'

/tjanster/radgenerator.asp, line 26

Jag menar här:

p = p + match.firstindex + match.length

Behöverman verkligen p +? Jag menar... Det blir ju ett ganska stort tal om man bara adderar och adderar och till slut så blir ju p större än antalet tecken i strSource...

r\ Har testat med att ta bort "p + "... Nu funkar det perfekt! ;)

268 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)