我不知道如何做到這一點。我應該從哪裏開始?我已經搜索了這個,並沒有一個結果就如何從文本文件中拉出一個隨機行。從文件中擷取隨機行
我發現的唯一的事情是https://github.com/chrisinajar/node-rand-line,但它不起作用。我如何從文本文件中讀取一行隨機文本?
我不知道如何做到這一點。我應該從哪裏開始?我已經搜索了這個,並沒有一個結果就如何從文本文件中拉出一個隨機行。從文件中擷取隨機行
我發現的唯一的事情是https://github.com/chrisinajar/node-rand-line,但它不起作用。我如何從文本文件中讀取一行隨機文本?
你可能會想看看Node.js的標準庫函數讀取文件,fs.readFile,並與沿東西線結束:
//note this will be async
function getRandomLine(filename){
fs.readFile(filename, function(err, data){
if(err) throw err;
var lines = data.split('\n');
/*do something with */ lines[Math.floor(Math.random()*lines.length)];
})
}
如果讀了整個事情和劈裂ISN」如果想要一個選項,那麼可以看看this stack overflow。
這對我來說並沒有馬上工作,我得到了錯誤:'data.split不是函數'。在[這個問題]的答案(http://stackoverflow.com/questions/10145946/what-is-causing-the-following-error-string-split-is-not-a-function-in-javascr)之後,我加了'data + =''',它工作。 –
我沒有節點方便的測試代碼,所以我不能給你確切的代碼,但我會做這樣的事情:
請注意,這不完全是隨機的。更長的行會被加權得更重,但它是在不讀取整個文件以獲取行數的唯一方法。
該方法允許您在不將整個文件保存在內存中的情況下獲取「隨機」行。
應該指出的是,node.js OS特定的EOL標記可以通過os.EOL訪問 – saintedlama
我可以給你一個建議,因爲我沒有使用buffered reader
int returnRandom(arraySize)
0
至arraySize
之間的一個隨機數
到底有多大這個文件?一個簡單的方法是讀取整個文件,然後選擇一個隨機行。但是,這至少需要與文件一樣多的內存。 – Brad
@Brad文件是2MB – mike
2MB?只是把它讀入內存中 – Dmitry