从文件中撷取一个随机行
我不知道如何做到这一点。 我应该从哪里开始? 我GOOGLE了这一点,而不是一个结果如何拉一个文本文件的随机行。
我发现的唯一的事情是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)]; }) }
如果阅读整个事情和分裂不是一个选项,那么也许看看这个堆栈溢出的想法。
我没有Node方便的testing代码,所以我不能给你确切的代码,但我会做这样的事情:
- 以字节为单位获取文件大小,select一个随机的字节偏移量
- 以stream的forms打开文件
- 使用这段代码发出线(或readline ,但最后我用它有一个讨厌的bug,它本质上不工作)
- 在你阅读的时候跟踪你在文件中的位置。 当你通过你select的偏移量,select该行并返回。
请注意,这不完全是随机的。 更长的行会被加权得更重,但是它是唯一的方法,不需要读取整个文件来计算行数。
这个方法允许你得到一个“随机”行,而不需要把整个文件保存在内存中。
我可以给你一个build议,因为我没有任何演示代码
- 使用
buffered reader
逐行读取文件 - 将每一行存储在一个string数组中
- 创build一个方法
int returnRandom(arraySize)
- 将数组大小传递给函数
- 计算
0
到arraySize
之间的随机数 - 返回随机数
- 从string数组中打印给定的索引