从文件中撷取一个随机行

我不知道如何做到这一点。 我应该从哪里开始? 我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代码,所以我不能给你确切的代码,但我会做这样的事情:

  1. 以字节为单位获取文件大小,select一个随机的字节偏移量
  2. 以stream的forms打开文件
  3. 使用这段代码发出线(或readline ,但最后我用它有一个讨厌的bug,它本质上不工作)
  4. 在你阅读的时候跟踪你在文件中的位置。 当你通过你select的偏移量,select该行并返回。

请注意,这不完全是随机的。 更长的行会被加权得更重,但是它是唯一的方法,不需要读取整个文件来计算行数。

这个方法允许你得到一个“随机”行,而不需要把整个文件保存在内存中。

我可以给你一个build议,因为我没有任何演示代码

  1. 使用buffered reader逐行读取文件
  2. 将每一行存储在一个string数组中
  3. 创build一个方法int returnRandom(arraySize)
  4. 将数组大小传递给函数
  5. 计算0arraySize之间的随机数
  6. 返回随机数
  7. 从string数组中打印给定的索引