2016-08-03 31 views

Antwort

1

Man könnte so etwas tun:

<cfscript> 
pag = FileOpen(ExpandPath('./text.txt'), "read"); 
counter = 0; 
randomLine = randRange(1, 10000); 
while(NOT FileisEOF(myfile)) { 
    counter++; 
    if (counter==randomLine) { 
     x = FileReadLine(pag); // read line 
     WriteOutput("#x#"); 
     break; 
    } 
} 
FileClose(pag); 
</cfscript> 

Es ist nicht sehr effizient, es so zu tun, und auch stützt sie sich auf die Anzahl der Zeilen in der Datei zu kennen. Wenn Sie es mehrere Male tun müssen, dann wäre es viel besser, die Datei einmal zu lesen und jede Zeile in einer Datenbank oder einem persistenten Speicherbereich zu speichern. Sie könnten dann ganz leicht jeden Datensatz daraus entnehmen. Zum Beispiel:

<cfscript> 
// read the file once 
pag = FileOpen(ExpandPath('./text.txt'), "read"); 
lines = []; 
while(NOT FileisEOF(myfile)) { 
    arrayAppend(lines, FileReadLine(pag)); // read line 
} 
FileClose(pag); 

// store the `lines` in a persistent scope or db etc 
// here I'm using application scope as a simple example 
application.filelines = lines; 
</cfscript> 

Dann können Sie eine zufällige Zeile greifen ohne erneute Lesen der Datei

<cfscript> 
totalLines = arrayLen(application.filelines); 
randomLine = randRange(1, totalLines); 

writeOutput(application.filelines[randomLine]); 
</cfscript> 
4

die Datei als chr Treat (10) Liste begrenzt. Verwenden Sie listToArray, um es in ein Array zu konvertieren. Verwenden Sie arrayLen, um die Anzahl der Zeilen zu erhalten, und randRange, um eine Zufallszahl zu erhalten. Dann gib die Linie aus.

+0

* Eine chr (10) getrennte Liste * Dies kann zu zusätzlichen Zeichen führen. Zeilenbegrenzer variieren um o/s. – Leigh