从文件中抓取随机行

时间:2012-11-15 05:33:52

标签: javascript node.js

我不知道如何做到这一点。我应该从哪里开始?我用谷歌搜索了这个,并没有提出如何从文本文件中提取随机行的结果。

我唯一发现的是https://github.com/chrisinajar/node-rand-line,但它不起作用。如何从文本文件中读取随机行?

4 个答案:

答案 0 :(得分:10)

您可能希望查看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)];
 })
}

如果阅读整篇文章并且拆分不是一种选择,那么可以查看this stack overflow的想法。

答案 1 :(得分:3)

我没有Node方便测试代码,所以我不能给你确切的代码,但我会做这样的事情:

  1. 获取文件大小(以字节为单位),选择随机字节偏移量
  2. 以流形式打开文件
  3. 使用this snippet发出行(或readline,但最后我使用它有一个令人讨厌的错误,它本质上不起作用)
  4. 在阅读时跟踪您在文件中的位置。当您传递所选的偏移量时,选择该行并将其返回。
  5. 请注意,这并非完全随机。较长的行将被加权更多,但它是唯一的方法,不读取整个文件来获得行数。

    此方法允许您在不将整个文件保留在内存中的情况下获得“随机”行。

答案 2 :(得分:1)

我同样需要从100 Mo以上的文件中随机选择一行。
所以我想避免将所有文件内容存储在内存中。
最后,我对所有行进行了两次迭代:首先获取行数,然后获取目标行的内容。
代码如下所示:

foo['a']['b']['c'] = self.shortcut

答案 3 :(得分:0)

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

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