webForumDet fria alternativet

ASP och regex problem

10 svar · 322 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Vore tacksam för lite hjälp.

regEx.Pattern = "%%1"
  Set Matches = regEx.Execute(mytext)
  For each match1 in Matches  
    mytext = regEx.Replace(mytext, match1,VBCrlf + "\n\r" +    match1 + "\n\r")
  Next

Alltså när regex hittar "%%1" då ville jag ha en radbrytning framför och en bakom. Jag får inga felmedelande, men ingenting händer heller.
Om jag skriver ut match1 så ser jag att den hittar rätt, men någonting är galet.

J.N.Medlem sedan apr. 20031 660 inlägg
#2

HEJ!

Fungerar "\n\r" i VB-script? Jag använder enbart VbCrLf och/eller VbTab.

sawMedlem sedan mars 20011 880 inlägg
#3

Försöker jag så här:

  mytext = regEx.Replace(mytext, match1,VBCrlf + VbCrLf +    match1 + VBCrlf + VbCrLf)

så fungerar det inte heller... :l

J.N.Medlem sedan apr. 20031 660 inlägg
#4

HEJ!

& istället för +?

sawMedlem sedan mars 20011 880 inlägg
#5

Tyvärr, så enkelt var det inte.

J.N.Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

Prova att ersätta med en annan text än Match1 istället.

Heter det inte Match.value förresten?
http://www.devguru.com/Technologies/vbscript/quickref/regexp.html

sawMedlem sedan mars 20011 880 inlägg
#7

Nu så lyckades jag att fixa det:

	Set RegEx = New RegExp
  	RegEx.Pattern = "%%"
  	RegEx.Global = True
  	RegEx.Multiline = True
  	Set Matches = RegEx.Execute(mytext)
  	For each Match in Matches
	mytext=Replace(mytext,Match,VBCrlf & Match)
  	Next

Men ack den som ropar hej...
Nu är det som så, att i den textfilen, så får inte första raden vara tom, den måste börja med %%
Som det nu är så blir det ju en radbrytning först.
Jag försöker med

if Match.FirstIndex > 1 then
		mytext=Replace(mytext,Match,VBCrlf & Match)
		end if

..men det reagerar den inte för.
Puuh det här var knepigt värre.

J.N.Medlem sedan apr. 20031 660 inlägg
#8

HEJ!

Njae, Firstindex gäller inte som du tror, det är en position; det finns inte Second/Third...TwelfthIndex.

This property returns the position, counted from the left with the first position being numbered zero, in a string where a match was made.
http://www.devguru.com/Technologies/vbscript/quickref/match.html

Det enklaste är att lägga en räknare som hoppar över första varvet, if i>1 then skriv ut.

sawMedlem sedan mars 20011 880 inlägg
#9

Det här ser ut att bli en långkörare, men jag får inte ihop det.
Det slutar med att den "tömmer" textfilen.

Dim RegEx,Matches,sMytext
  	Set RegEx = New RegExp
  	RegEx.Pattern = "%%"
  	RegEx.Global = True
  	RegEx.Multiline = True
  	Set Matches = RegEx.Execute(mytext)
Dim i
i = 0
  	For each Match in Matches
  		if i > 1 then
			mytext=mytext & Replace(mytext,Match,VBCrlf & Match)
		else
		end if
		i=i +1
		mytext=mytext
  	Next

Vad gör jag för fel? :r

J.N.Medlem sedan apr. 20031 660 inlägg
#10

HEJ!

Ja, jag vet inte, men ska detta vara så?
mytext=**mytext & [b/]Replace(mytext,Match,VBCrlf & Match)

Dessutom behöver du inte else ... end if och sätta mytext till sig själv igen.

Testa med en enklare variant av din fil och skriv ut vad du har för text före och efter och se när/var det blir fel, är mitt generella råd.**

sawMedlem sedan mars 20011 880 inlägg
#11

LÖST.
Efter mycket krabbande och på fel spår, så löste det sig:

Set RegEx = New RegExp
  	regEx.Pattern = "(%%)"
  	RegEx.Global = True  	
  	Set Matches = RegEx.Execute(mytext)
    mytext = regex.replace(mytext, VbCrLf & "$1")
    mytext=MID(mytext,3)

Nu fick jag också bort den första tomma raden.
Tack för all hjälp

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)