webForumDet fria alternativet

Regexp o hämta data från DB

ASP

10 svar · 232 visningar · startad av aleborg

Medlem sedan jan. 20013 341 inlägg
Frågan#1

Jag har en kod som ser ut så här:

Function VisaPdf(text)
	Dim vpSQL, objRegExp, ersatt, matches, Match
	
	Set objRegExp = New regexp
	objRegExp.Global = true
	objRegExp.IgnoreCase = true
	objRegExp.Pattern = "\[fil=(.*?)\]"
	Set matches = objRegExp.Execute(text)
	For Each Match IN Matches
		vpSQL = getDbRows( strCon, "Select FilID, Fil_Topic_"& Session("lang") &", Fil_End, Fil_Namn From Filer Where FilID="& objRegExp.Replace(Match.Value,"$1") )
		If Not IsNull(vpSQL) Then
			ersatt = "<table width=""450"" border=""0"" cellspacing=""0"" cellpadding=""0"">"
			ersatt = ersatt &"<tr height=""15""><td height=""15""></td></tr>"
			ersatt = ersatt &"<tr height=""1""><td bgcolor=""#A9A9A9"" height=""1""></td></tr>"
			ersatt = ersatt &"<tr><td>"
			ersatt = ersatt &"<table width=""450"" border=""0"" cellspacing=""0"" cellpadding=""0"">"
			ersatt = ersatt &"<tr height=""24""><td bgcolor=""#A9A9A9"" width=""1"" height=""24""></td>"
			ersatt = ersatt &"<td width=""5"" height=""24""></td><td width=""20"" height=""24""><img src=""../../graphics/misc/iconPdf.gif"" alt="""" height=""13"" width=""14"" border=""0""></td>"
			ersatt = ersatt &"<td height=""24""><div class=""download""><a href=""../../transauto/upload/"& vpSQL(0,0) &"_"& vpSQL(3,0) &"_"& Session("lang") &"."& vpSQL(2,0) &""" target=""_blank"">"& vpSQL(1,0) &"</a></div></td>"
			ersatt = ersatt &"<td align=""right"" height=""24""><div class=""download"">32 kb</div></td>"
			ersatt = ersatt &"<td width=""5"" height=""24""></td><td bgcolor=""#A9A9A9"" width=""1"" height=""24""></td></tr>"
			ersatt = ersatt &"<tr height=""1""><td bgcolor=""#A9A9A9"" width=""1"" height=""1""></td>"
			ersatt = ersatt &"<td bgcolor=""#A9A9A9"" width=""5"" height=""1""></td><td bgcolor=""#A9A9A9"" width=""20"" height=""1""></td>"
			ersatt = ersatt &"<td bgcolor=""#A9A9A9"" height=""1""></td><td align=""right"" bgcolor=""#A9A9A9"" height=""1""></td>"
			ersatt = ersatt &"<td bgcolor=""#A9A9A9"" width=""5"" height=""1""></td><td bgcolor=""#A9A9A9"" width=""1"" height=""1""></td>"
			ersatt = ersatt &"</tr></table></td></tr><tr height=""15""><td height=""15""></td></tr></table>"
		Else
			ersatt = ""
		End If
		text = objRegExp.Replace(text,ersatt)
	Next
	VisaPdf = text
End Function

problemet är att det blir samma data på alla ställen som replacas
Vad gör jag fel?

Medlem sedan aug. 20003 575 inlägg
#2

Varför inte bara text = ersatt ?

Och istället för

ersatt = ""
ersatt = ersatt & ""

skriv

ersatt = ""&_
"fortsatt text"&_
"fortsatt"
Medlem sedan jan. 20013 341 inlägg
#3

Nickemannen skrev:

Varför inte bara text = ersatt ?

Då syns inte övrig text, regexp:en plockar ut [fil=34] och [fil=2] i en text, t ex:
"här har vi en fil [fil=34] och en till [fil=2]"

plockar fram med regexp 34 och 2 och hämtar info om filerna i en databas och ersätter varje [fil=X] med "ersatt"

Medlem sedan aug. 20003 575 inlägg
#4

Men du, du har ingen räknare i Din for each så att den kan gå till nästa post i vpSQL(0,0), skall det inte vara vpSQL(i,0) och att i ökas med ett i varje steg ?

Kanske har missuppfattat här också.

Medlem sedan jan. 20013 341 inlägg
#5

Den hämtar ju data i varje "for" så det behövs inte

Medlem sedan aug. 20003 575 inlägg
#6

Okej, hehe hittade något annat nu då.

Borde det inte vara såhär ?

text = text & reg.replace

Medlem sedan jan. 20013 341 inlägg
#7

Då blir det dubbelt av övrig text!

Medlem sedan jan. 20013 341 inlägg
#8

Någon som vet hur man löser detta?
Någon måste gjort en funktion med regexp som hämtar data ur en databas?!

Medlem sedan mars 20015 287 inlägg
#9

Om tanken alltså är att du ska få ut ett helt "tableblock" för varje matchning så måste väl de sista raderna i loopen se ut så här:

		VisaPdf = VisaPdf & objRegExp.Replace(text,ersatt)
	Next

End Function

Annars får du väl 'text' överskrivet för varje loop så att det bara blir det sista kvar?

Medlem sedan jan. 20013 341 inlägg
#10

Då blir allt dubbelt!

Medlem sedan jan. 20013 341 inlägg
#11

Löste det!

Function VisaPdf(text)
	Dim vpSQL, objRegExp, ersatt, matches, Match, texten
	
	Set objRegExp = New regexp
	objRegExp.Global = false
	objRegExp.IgnoreCase = true
	objRegExp.Pattern = "\[fil=(.*?)\]"
	Set matches = objRegExp.Execute(text)
		texten = text
	For Each Match IN matches
		vpSQL = getDbRows( strCon, "Select FilID, Fil_Topic_"& Session("lang") &", Fil_End, Fil_Namn, Fil_Size From Filer Where FilID="& objRegExp.Replace(Match.Value,"$1") )
		If Not IsNull(vpSQL) Then
			ersatt = "<table width=""450"" border=""0"" cellspacing=""0"" cellpadding=""0"">" & _
			"							<tr height=""15""><td height=""15""></td></tr>" & _
			"							<tr height=""1""><td bgcolor=""#A9A9A9"" height=""1""></td></tr>" & _
			"							<tr><td>" & _
			"									<table width=""450"" border=""0"" cellspacing=""0"" cellpadding=""0"">" & _
			"										<tr height=""24""><td bgcolor=""#A9A9A9"" width=""1"" height=""24""></td>" & _
			"											<td width=""5"" height=""24""></td><td width=""20"" height=""24""><img src=""../../graphics/misc/iconPdf.gif"" alt="""" height=""13"" width=""14"" border=""0""></td>" & _
			"											<td height=""24""><div class=""download""><a href=""../../upload/"& vpSQL(0,0) &"_"& vpSQL(3,0) &"_"& Session("lang") &"."& vpSQL(2,0) &""" target=""_blank"">"& vpSQL(1,0) &"</a></div></td>" & _
			"											<td align=""right"" height=""24""><div class=""download"">"& ConvFileSize(vpSQL(4,0),1) &"</div></td>" & _
			"											<td width=""5"" height=""24""></td><td bgcolor=""#A9A9A9"" width=""1"" height=""24""></td></tr>" & _
			"										<tr height=""1""><td bgcolor=""#A9A9A9"" width=""1"" height=""1""></td>" & _
			"											<td bgcolor=""#A9A9A9"" width=""5"" height=""1""></td><td bgcolor=""#A9A9A9"" width=""20"" height=""1""></td>" & _
			"											<td bgcolor=""#A9A9A9"" height=""1""></td><td align=""right"" bgcolor=""#A9A9A9"" height=""1""></td>" & _
			"											<td bgcolor=""#A9A9A9"" width=""5"" height=""1""></td><td bgcolor=""#A9A9A9"" width=""1"" height=""1""></td>" & _
			"										</tr></table></td></tr><tr height=""15""><td height=""15""></td></tr></table>"
		Else
			ersatt = ""
		End If
		texten = objRegExp.Replace(texten,ersatt)
		Exit For
	Next
		If Matches.Count>0 Then
			texten=VisaPdf(texten)
		End If
	VisaPdf = texten
End Function
269 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)