<cffile action="read" file="#ExpandPath('./text.txt')#" variable="pag">
如何從屏幕上的文件顯示隨機線? 此txt文件包含行10k。 感謝在txt文件中獲取隨機行。 Coldfusion
<cffile action="read" file="#ExpandPath('./text.txt')#" variable="pag">
如何從屏幕上的文件顯示隨機線? 此txt文件包含行10k。 感謝在txt文件中獲取隨機行。 Coldfusion
你可以做這樣的事情:
<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>
將這個文件看作一個CHR(10)分隔的列表。使用listToArray
將其轉換爲數組。使用arrayLen
來獲得行數,並使用randRange
來獲得一個隨機數。然後輸出該行。
* chr(10)分隔列表*這可能會導致多餘的字符。行分隔符因o/s而異。 – Leigh