从Node.js中的文本文件的第N到第M行读取

神经丛

尽管我找到了许多关于逐行读取文本文件或读取第N行的示例,但是我找不到关于如何从第N行读取到第M行的任何内容。

该文件有些大,大约5 GB(大约1000万行)。

编辑:行没有固定的长度。

英雄Qn

您可以使用readline功能将文件读取为流,而无需将其整体加载到RAM中。这是一个如何完成的示例:

const fs = require('fs');
const readline = require('readline');

function readFromN2M(filename, n, m, func) {
  const lineReader = readline.createInterface({
    input: fs.createReadStream(filename),
  });

  let lineNumber = 0;

  lineReader.on('line', function(line) {
    lineNumber++;
    if (lineNumber >= n && lineNumber < m) {
      func(line, lineNumber);
    }
  });
}

让我们尝试一下:

// whatever you would like to do with those lines
const fnc = (line, number) => {
  // e.g. print them to console like this:
  console.log(`--- number: ${number}`);
  console.log(line);
};

// read from this very file, lines from 4 to 7 (excluding 7):
readFromN2M(__filename, 4, 7, fnc);

这给出了输出:

//  --- number: 4
//  function readFromN2M(filename, n, m, func) {
//  --- number: 5
//    const lineReader = readline.createInterface({
//  --- number: 6
//      input: fs.createReadStream(filename),

行从1开始编号。要从0开始,只需稍微修改一下编号即可。

更新:

我刚刚意识到,从某种意义上说,如果某种文件没有以换行符结尾,那么这种方法并不是100%安全的,那么这种文件的最后一行将不会被这种方式读取。这是readline的设计方式...为了克服这一点,我将以更复杂的方式准备文件流-通过在需要时向这些流添加新的行字符。这将使解决方案更长一些。但这一切皆有可能。

更新2

正如您在评论中提到的那样,即使已经找到所需的行,lineReader仍会继续遍历,这会使应用程序变慢。我认为我们可以这样停止它:

lineReader.on('line', function(line) {
  lineNumber++;
  if (lineNumber >= n && lineNumber < m) {
    func(line, lineNumber);
  }

接下来的3行应立即停止lineReader,但不能立即停止,如官方文档所述

  if (lineNumber > m) {
    lineReader.close();
  }
});

我相信这应该可以解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用node.js检查文本文件中的重复行?

来自分类Dev

如何从bash中的文本文件读取第n行?

来自分类Dev

如何使用 node.js 读取名词文本文件并将其存储在变量中

来自分类Dev

读取第5行,直到文本文件的末尾

来自分类Dev

Node.js:仅部分读取大型文本文件

来自分类Dev

Node.js:仅部分读取大型文本文件

来自分类Dev

Python从第二行到第十五行读取文本文件

来自分类Dev

Python从第二行到第十五行读取文本文件

来自分类Dev

如何在node.js中的文本文件中添加第一行(使用fs)

来自分类Dev

在 Node JS 中将文本文件拆分为数组

来自分类Dev

如何使用批处理仅从文本文件中读取第17行

来自分类常见问题

在文本文件中获取第n列

来自分类Dev

根据node.js中的行数拆分文本文件

来自分类Dev

Node.js如何轻松地将字符串插入文件的第n行?

来自分类Dev

计算文本文件中第3列或第4列中的单词超过n个字符的行

来自分类Dev

如何在文本文件中的第n:th行之后遍历数据?

来自分类Dev

通过批处理脚本从文本文件中读取特定的Word(第2行,Word 3)

来自分类Dev

读取 > 2000 行文本文件,但它停在第 46 行是空的。为什么?

来自分类Dev

在文本文件的每第n行前添加文本

来自分类Dev

Node.js - process.exit 并将整个 console.log 消息附加到文本文件中

来自分类Dev

从C中的文本文件读取前N行

来自分类Dev

使用Node Webkit编写文本文件

来自分类Dev

获取文本文件第n行的最快方法是什么

来自分类Dev

用bash变量替换文本文件行中的第5和第6个“单词”

来自分类Dev

如何在文本文件中的第6(Nth)行中选择(删除)?

来自分类Dev

如何在文本文件中的第6(Nth)行中选择(删除)?

来自分类Dev

PHP-从文本文件中回显第6行

来自分类Dev

使用python查找文本文件中单词出现的第n个实例

来自分类Dev

求和文本文件中第N列的最快方法

Related 相关文章

  1. 1

    如何使用node.js检查文本文件中的重复行?

  2. 2

    如何从bash中的文本文件读取第n行?

  3. 3

    如何使用 node.js 读取名词文本文件并将其存储在变量中

  4. 4

    读取第5行,直到文本文件的末尾

  5. 5

    Node.js:仅部分读取大型文本文件

  6. 6

    Node.js:仅部分读取大型文本文件

  7. 7

    Python从第二行到第十五行读取文本文件

  8. 8

    Python从第二行到第十五行读取文本文件

  9. 9

    如何在node.js中的文本文件中添加第一行(使用fs)

  10. 10

    在 Node JS 中将文本文件拆分为数组

  11. 11

    如何使用批处理仅从文本文件中读取第17行

  12. 12

    在文本文件中获取第n列

  13. 13

    根据node.js中的行数拆分文本文件

  14. 14

    Node.js如何轻松地将字符串插入文件的第n行?

  15. 15

    计算文本文件中第3列或第4列中的单词超过n个字符的行

  16. 16

    如何在文本文件中的第n:th行之后遍历数据?

  17. 17

    通过批处理脚本从文本文件中读取特定的Word(第2行,Word 3)

  18. 18

    读取 > 2000 行文本文件,但它停在第 46 行是空的。为什么?

  19. 19

    在文本文件的每第n行前添加文本

  20. 20

    Node.js - process.exit 并将整个 console.log 消息附加到文本文件中

  21. 21

    从C中的文本文件读取前N行

  22. 22

    使用Node Webkit编写文本文件

  23. 23

    获取文本文件第n行的最快方法是什么

  24. 24

    用bash变量替换文本文件行中的第5和第6个“单词”

  25. 25

    如何在文本文件中的第6(Nth)行中选择(删除)?

  26. 26

    如何在文本文件中的第6(Nth)行中选择(删除)?

  27. 27

    PHP-从文本文件中回显第6行

  28. 28

    使用python查找文本文件中单词出现的第n个实例

  29. 29

    求和文本文件中第N列的最快方法

热门标签

归档