<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) * Это может привести к дополнительным символам. Линейные разделители различаются по о/с. – Leigh