在nodejs中逐行读取文件没有简单的方法吗? [复制]
Posted
技术标签:
【中文标题】在nodejs中逐行读取文件没有简单的方法吗? [复制]【英文标题】:No easy way to read a file line by line in nodejs? [duplicate] 【发布时间】:2019-03-18 12:16:15 【问题描述】:我正在用 nodejs 编写一个小解析器,它将给定的汇编语言翻译成二进制代码。具有讽刺意味的是,我在阅读台词时遇到了困难。 我想要的是可以逐行读取文件(如 readline.createInterface)模块但它应该只在我调用函数时按行前进。
I.E
1.) While LastChunkNotReached
1.1) Read chunk
1.2) Split chunk into lines and save into buffer
2.) While last line in buffer not reached
2.1) return actual line somehow and wait for the user to invoke a function to
advance to the next line.
2.) End
1.) End
如果是可读事件(这可能是我唯一有效的起点),您可以在调用 stream.read() 函数时收集块。
stream.on("readable", () =>
console.log("Data available");
const data = stream.read();
console.log("Data read: " + data)
)
但是这种方法的问题如下(据我观察): 当我使用 read 函数时,它从内部缓冲区返回一个块,但现在每次内部缓冲区有新的新数据时都会触发可读事件(这反过来又调用 .read() 函数)
有没有一种干净的方法来拦截这种行为以达到我上面描述的程度? 如果您能就这个问题给我一些想法或提示,那就太好了!
【问题讨论】:
搜索“nodejs 逐行读取文件”足以回答这个问题。 他们都回答了如何逐行阅读的问题(我在帖子中提到的 fs.createInterface),而不是如何阅读一行并停止执行,直到有人想要下一行 不相关 - 你正在处理每一行,因为它进入。你为什么需要停下来等待? @Byte 我在这里的另一个问题中找到了一个突出的答案:***.com/a/42867871/1330083您可能想尝试一下。 我想我不能很好地解释我的问题,因为我的英语不好。但我会调查@maksbd19 的答案。抱歉给您添麻烦 【参考方案1】: var readline = require('readline');
var fs = require('fs');
var myInterface = readline.createInterface(
input: fs.createReadStream('demo.txt')
);
var lineno = 0;
myInterface.on('line', function (line)
lineno++;
console.log('Line number ' + lineno +" > "+ line);
);
【讨论】:
每行之后如何暂停/恢复执行? @Byte ... 为什么要这样做?您处理可用的每一行,这与读取一行、处理它并读取另一行等没有什么不同。您要么没有很好地描述问题,要么您对异步编程不满意。以上是关于在nodejs中逐行读取文件没有简单的方法吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章