webForumDet fria alternativet

Inte räkna alla tecken

ASP

11 svar · 366 visningar · startad av ampy

Medlem sedan feb. 20011 498 inlägg
Frågan#1

Har denna kod för att räkna ut antal tecken i genomsnitt:

Set uRS = Connect.Execute("select avg(char_length(meddelande)) as averageLength from forum where skribent = '"&username&"'") 
Response.Write Round(uRS("averageLength"),1)

Men jag vill att den inte ska räkna alla tecken som finns mellan [ CITAT] och [ /CITAT] och den ska inte heller räkna orden [ CITAT] och [ /CITAT]

Hur gör man detta?

Medlem sedan maj 200010 687 inlägg
#2

Kanske så här:

replace(meddelande, 'och', '')
Medlem sedan feb. 20011 498 inlägg
#3

Kolla min redigering på första inlägget, blev lite fel innan.

Medlem sedan maj 200010 687 inlägg
#4

Ouch, lite jobbigare. Osäker på om det går med SQL. :l

Blir nog till o loopa, fixa med RegExp och sen räkna ihop. Kluddigt... :l

Medlem sedan feb. 20011 498 inlägg
#5

Tror jag läste någonstans om att det finns en inbyggd funktion i MySQL som kan göra detta.

Medlem sedan dec. 200012 464 inlägg
#6

Du får nog lösa det med VB-script, som Erik säger.

Medlem sedan feb. 20011 498 inlägg
#7

LarsG skrev:

Du får nog lösa det med VB-script, som Erik säger.

Hur?

Medlem sedan dec. 200012 464 inlägg
#8
Set uRS = Connect.Execute("select meddelande from forum where skribent = '"&username&"'") 
set o = new regexp
o.ignorecase = true
o.global = true
o.pattern = "\[CITAT\].*?\[\/CITAT\]"
l = 0
c = 0
while not rs.eof
  l = l + len(o.replace(rs("meddelande"),""))
  c = c + 1
  rs.movenext
wend
if  c <> 0 then avg = cdbl(len)/cdbl(c) else avg = 0

Ungefär så. Jag har inte testat. Du kan ju titta lite på andra inlägg om regexp. Jag har för mig att jag sett ett inlägg där någon ville ta bort just CITAT från en text.

Medlem sedan feb. 20011 498 inlägg
#9

Tar denna kod bort det som är emellan CITAT och /CITAT?

(räknar bort)

Medlem sedan dec. 200012 464 inlägg
#10

Joo, det är tänkt så.

Medlem sedan feb. 20011 498 inlägg
#11

har ändrat så koden ser ut så här nu:

			Set uRS = Connect.Execute("select meddelande from forum where skribent = '"&username&"'") 
			set o = new regexp
			o.ignorecase = true
			o.global = true
			o.pattern = "\[CITAT\].*?\[\/CITAT\]"
			l = 0
			c = 0
			while not uRS.eof
			  l = l + len(o.replace(uRS("meddelande"),""))
 			  c = c + 1
			  uRS.movenext
			wend
			if  c <> 0 then avg = cdbl(len)/cdbl(c) else avg = 0

			set uRS = nothing
			set o = nothing

Men får:

Fel antal argument eller felaktig egenskapstilldelning.: 'Len'

Testade då med char_length men det funkade inte heller. Använder MySQL-databas

Medlem sedan dec. 200012 464 inlägg
#12

Vilken databas har ingen betydelse i detta sammanhang. Finns det meddelanden som är null? I så fall kan du skriva om select-satsen

Set uRS = Connect.Execute("select meddelande from forum where skribent = '"&username&"' and meddelande is not null")
276 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)