在txt文件中获取随机行。 ColdFusion的

时间:2016-08-03 10:35:47

标签: coldfusion cfml

 <cffile action="read" file="#ExpandPath( './text.txt' )#" variable="pag">

如何在屏幕上显示文件中的随机行? 此txt文件包含10k行。 感谢

2 个答案:

答案 0 :(得分:4)

将文件视为chr(10)分隔列表。使用listToArray将其转换为数组。使用arrayLen获取行数,使用randRange获取随机数。然后输出该行。

答案 1 :(得分: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>