AampyMedlem sedan feb. 20011 498 inlägg Har denna kod för att räkna ut antal tecken per post i genomsnitt:
<%
Set uRS = Connect.Execute("select avg(len(meddelande)) as averageLength from forum where skribent = '"&username&"'")
Response.Write Round(uRS("averageLength"),1)
End If
RS.Close
%>
Men nu undrar jag hur man gör så att man INTE räknar de tecken som finns mellan [ CITAT ] och [ /CITAT ] och den ska inte heller räknar orden [ CITAT ] och [ /CITAT ]
Går detta att göra och isf hur?
LLarsGMedlem sedan dec. 200012 464 inlägg Om det finns någon replace-funktion i Access så skulle det väl gå. Jag förstår dock inte varför du skall krångla till det i onödan.
LLarsGMedlem sedan dec. 200012 464 inlägg Det var för att jag läste din post innan redigeringen.
I så fall så måste du plocka upp varje meddelande för sig och använda regexp för att ta bort det som står mellan citat coh sedan räkna ut genomsnittet. Det går men det blir lite kodande.
Jag tycker fortfarande att det är onödigt krångel.
AampyMedlem sedan feb. 20011 498 inlägg Kan du visa hur man gör det?
LLarsGMedlem sedan dec. 200012 464 inlägg Ja, det kan jag väl försöka med.
dim connect,rs,query
set connect = server.createobject("adodb.connection")
connect.open "dsn"
query = "select meddelande from forum where skribent = '"&username&"'")
set rs = connect.execute(query)
length = 0
items = 0
if not rs.eof then
set re = new regexp
re.ignorecase = true
re.global = true
re.pattern = "(\[CITAT\].*?\[/CITAT\])"
while not rs.eof
length = length + len(re.replace(rs("meddelande"),""))
items = items + 1
rs.movenext
wend
avglength = round(cdbl(length)/cdbl(items),2)
else
avglength = 0
end if
AampyMedlem sedan feb. 20011 498 inlägg Din kod fungerar utmärkt :birp
Fast jag vill också så att denna kod räknar som den innan men jag fattar inte hur jag ska lägga till det, kan du visa?
<%
query2 = "select top 10 skribent,avg(len(meddelande)) as averageLength " & _
" from forum inner join affar on forum.skribent_id = affar.medlemsid " &_
" where tecken = 'ja' " & _
" group by skribent order by 2 desc"
set rs = connect.execute(query2)
c = 0
if not rs.eof then
response.write "De 10 som har mest tecken per inlägg: <br>"
do while not rs.eof
c = c + 1
response.write "<b><font color='#BE0202'>" & c & ".</font></b> " & rs("skribent") & " <font color='#676767'>(" & round(rs("averageLength"),2) & " tecken" & ")</font><br>"
if c = 10 then exit do
rs.movenext
loop
end if
%>
LLarsGMedlem sedan dec. 200012 464 inlägg Det är nu som det börjar krångla till sig ordentligt.
Du får beräkna medel för alla användare, lagra detta i en array och sortera den och sedan skriva ut de 10 första
ungefär
dim avg(1,100)
query = "select skribent,meddelande from forum order by skribent"
set rs = connect.execute(query)
s = ""
users = -1
while not rs.eof
if s <> rs("skribent") then
s = rs("skribent")
if users >= 0 then
if users > ubound(avg) then redim preserve avg(users+100)
avg(0,users) = s
avg(1,users) = avglen
end if
avglen = 0
items = 0
users = users + 1
end if
'beräkna längd enligt tidigare
rs.movenext
wend
'sortera array fallande
for i = 0 to 9
response.write avg(0,i) & " " & avg(1,i)
next
Ovanstående är inget som är testat överhuvudtaget, men är mer tänkt som en skiss
AampyMedlem sedan feb. 20011 498 inlägg Testade din kod nu och får då följande fel:
Felaktigt matrisindex
på denna rad:
if users > ubound(avg) then redim preserve avg(users+100)
LLarsGMedlem sedan dec. 200012 464 inlägg if users > ubound(avg,2) then redim preserve avg(1,users+100)
Vad var det jag sa?
AampyMedlem sedan feb. 20011 498 inlägg Fattar inte vad jag ska sätta ihop koderna. Kan du inte visa mig LarsG, vore väldigt snällt?
<%
query2 = "select top 10 skribent,avg(len(meddelande)) as averageLength " & _
" from forum inner join affar on forum.skribent_id = affar.medlemsid " &_
" where tecken = 'ja' " & _
" group by skribent order by 2 desc"
set rs = connect.execute(query2)
c = 0
if not rs.eof then
response.write "De 10 som har mest tecken per inlägg: <br>"
do while not rs.eof
c = c + 1
response.write "<b><font color='#BE0202'>" & c & ".</font></b> " & rs("skribent") & " <font color='#676767'>(" & round(rs("averageLength"),2) & " tecken" & ")</font><br>"
if c = 10 then exit do
rs.movenext
loop
end if
KOD 2 --------------------------------------------------
dim avg(1,100)
query = "select skribent,meddelande from forum order by skribent"
set rs = connect.execute(query)
s = ""
users = -1
while not rs.eof
if s <> rs("skribent") then
s = rs("skribent")
if users >= 0 then
if users > ubound(avg,2) then redim preserve avg(1,users+100)
avg(0,users) = s
avg(1,users) = avglen
end if
avglen = 0
items = 0
users = users + 1
end if
'beräkna längd enligt tidigare
rs.movenext
wend
'sortera array fallande
for i = 0 to 9
response.write avg(0,i) & " " & avg(1,i)
next
%>
LLarsGMedlem sedan dec. 200012 464 inlägg set re = new regexp
re.ignorecase = true
re.global = true
re.pattern = "(\[CITAT\].*?\[/CITAT\])"
avglength = round(cdbl(length)/cdbl(items),2)
dim avg(1,100)
query = "select skribent,meddelande from forum order by skribent"
set rs = connect.execute(query)
s = ""
users = -1
while not rs.eof
if s <> rs("skribent") then
s = rs("skribent")
if users >= 0 then
if users > ubound(avg,2) then redim preserve avg(1,users+100)
avg(0,users) = s
avglen = round(cdbl(length)/cdbl(items),2)
avg(1,users) = avglen
end if
length = 0
items = 0
users = users + 1
end if
length = length + len(re.replace(rs("meddelande"),""))
items = items + 1
rs.movenext
wend
'sortera array fallande
for i = 0 to 9
response.write avg(0,i) & " " & avg(1,i)
next
Det finns nog lite exempel på hur man kan sortera en array i tidigare inlägg. Du kan ju vänta med den och se till att beräkningen av medelvärdet fungerar ordentligt först.