Hur ser anropet till funktionen getRandomRow ut?
response.write getRandomRow("magdur.txt") & "<br>"
7 svar · 211 visningar · startad av LilleSkutt
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
Hur ser anropet till funktionen getRandomRow ut?
response.write getRandomRow("magdur.txt") & "<br>"
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
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> )
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?
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))
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?
Går det inte bra med
<% option explicit
dim arr,rs,...
'...
'...
arr = rs.getrows()
'...
'...
%>
?