2016-08-03 52 views

回答

1

你可以做這樣的事情:

<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> 

這不是很有效地這樣做的,而且它依賴於你知道文件中的行數。如果您需要多次執行此操作,那麼讀取一次文件並將每行存儲在數據庫或持久存儲範圍內會更好。你可以很容易地從它抓取任何記錄。例如:

<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> 

然後你可以抓住一個隨機線,無需重新讀取文件

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

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

將這個文件看作一個CHR(10)分隔的列表。使用listToArray將其轉換爲數組。使用arrayLen來獲得行數,並使用randRange來獲得一個隨機數。然後輸出該行。

+0

* chr(10)分隔列表*這可能會導致多餘的字符。行分隔符因o/s而異。 – Leigh

相關問題