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
------------------
---
/* LilleSkutt */
LarsGMedlem sedan dec. 200012 464 inlägg Hur ser anropet till funktionen getRandomRow ut?
response.write getRandomRow("magdur.txt") & "<br>"
------------------
essentitia preter non sans multiplicandum
icaaqMedlem sedan okt. 20005 273 inlägg 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
------------------
http://free.webforum.nu/wf/Forum1/HTML/004045.html
[Redigerat av icaaq den 16 sep 2001]
LarsGMedlem sedan dec. 200012 464 inlägg 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> )
------------------
essentitia preter non sans multiplicandum
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?
------------------
---
/* LilleSkutt */
LarsGMedlem sedan dec. 200012 464 inlägg 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))
------------------
essentitia preter non sans multiplicandum
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?
------------------
---
/* LilleSkutt */
LarsGMedlem sedan dec. 200012 464 inlägg Går det inte bra med
<% option explicit
dim arr,rs,...
'...
'...
arr = rs.getrows()
'...
'...
%>
?
------------------
essentitia preter non sans multiplicandum