webForumDet fria alternativet
Logga in / Bli medlem

Random-funktion

ASP

7 svar · 211 visningar · startad av LilleSkutt

Medlem sedan feb. 2001265 inlägg
Trådstart#1

Hallo.
Jag har lite problem med en funktion som ska returnera en slumpvis vald rad ur en textfil. Jag får inga felmeddelanden, men jag får inte heller någon utskrift.

Vad kan vara fel med koden:

Function getRandomRow(ByVal FILE)
    Dim objFSO, objFile

    set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    If Not objFSO.FileExists(FILE) Then
        Response.Write "Filen hittades inte"
        Response.End
    End If

    set objFile = objFSO.OpenTextFile(FILE)

    Dim counter, arr()
    ReDim arr(20)
    counter = 0

    Do Until objFile.AtEndOfStream
        arr(counter) = objFile.ReadLine
        counter = counter + 1
    Loop

    objFile.Close
    set objFile = Nothing
    set objFSO = Nothing

    Dim intRow, strRow

    Randomize
    intRow = Int(Rnd * uBound(arr))
    strRow = arr(intRow)

    getRandomRow = strRow
End Function
Medlem sedan dec. 200012 464 inlägg
#2

Hur ser anropet till funktionen getRandomRow ut?

response.write getRandomRow("magdur.txt") & "<br>"
Medlem sedan okt. 20005 273 inlägg
#3

en fråga, om man skriver så här

    Do Until objFile.AtEndOfStream
        arr(counter) = objFile.ReadLine
        counter = counter + 1
    Loop

kommer inte arr() bli en enda lång rad med lästa rader...eller läggs det ett komma imellan alla lästa rader...automatiskt eller så ??

sen kan man väl göra så här istället
/r. om nu det kommer nåt imellan som skiljer texten åt...annars får man väl lägga dit ett komma....

Do Until objFile.AtEndOfStream
        arr(objFile.Line) = objFile.ReadLine
        Loop

:OO

Medlem sedan dec. 200012 464 inlägg
#4

raderna hamnar i olika element i arrayen så det är inget problem. Däremot så borde LilleSkutt lägga till en koll på att han inte får mer än 21 rader (eller göra redim i såfall).

Om man ändå skall läsa in hela filen så kan man skriva så här

arr = split(objFile.readall,vbCrLf)

(om man vill skriva ut en rad så måste man lägga dit en <br> )

Medlem sedan feb. 2001265 inlägg
#5

Anropet sker precis så LarsG!

Jag kommer själv att sköta administrationen av de textfiler som kommer att läsas, så de kommer inte överstiga 21 rader... Men ditt förslag ska jag ändå gå över till, ser bättre ut och det är säkrare :)

Men jag gör väl inget fel i själva randomizen? Det verkar ju vara det som spökar...

Jag har ett nytt problem nu:
Jag sätter alltid Option Explicit i mina filer, och när jag sedan ska hämta in all information från en databas till en array, hur ska jag dimma den?!

Man kan ju inte bara sätta

Dim rows
rows = ConnectionObjekt.Execute(SQLquery).GetRows()

Eller hur?

Medlem sedan dec. 200012 464 inlägg
#6

Vet du att du har exakt 21 rader i filen?

Ubound(arr) blir alltid 20 så det är nog bättre att använda denna

intRow = Int(Rnd * (counter-1))
Medlem sedan feb. 2001265 inlägg
#7

Ok, det har du rätt i. Men om jag ska använda mig av Split(objFile.ReadAll, vbCrLf) istället måste jag ju unbounda :)

Du har inga förslag på hur jag ska göra med min andra fråga?

Går det att lägga in GetRows() i en icke-ReDimmad array?

Medlem sedan dec. 200012 464 inlägg
#8

Går det inte bra med

<% option explicit
dim arr,rs,...
'...
'...
arr = rs.getrows()
'...
'...
%>

?

257 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)