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