javascript - 从 Node.js 中的文件同步读取行

标签 javascript node.js

我需要用 Node.js 逐行解析以下格式的文件:

13
13
0 5
4 3
0 1
9 12
6 4
5 4
0 2
11 12
9 10
0 6
7 8
9 11
5 3

它代表一个图形。前两行是边数和顶点数,后面是边数。

我可以通过以下方式完成任务:

var fs = require('fs');
var readline = require('readline');
var read_stream = fs.createReadStream(filename);
var rl = readline.createInterface({
    input: read_stream
});
var c = 0;
var vertexes_number;
var edges_number;
var edges = [];
rl.on('line', function(line){
    if (c==0) {
        vertexes_number = parseInt(line);
    } else if (c==1) {
        edges_number = parseInt(line);
    } else {
        edges.push(line.split(' '));
    }
    c++;
})
.on('end', function(){
    rl.close();
})

我知道这种事情可能不是 Node.js 的初衷,但是 line 回调中的级联 if 看起来并不优雅/可读我。

有没有办法像其他编程语言一样从流中同步读取行?

如果没有内置解决方案,我愿意使用插件。

[编辑]

抱歉,我应该更清楚地说明 我想避免事先将整个文件加载到内存中

最佳答案

这些简单任务的常用代码部分:

var lines = require('fs').readFileSync(filename, 'utf-8')
    .split('\n')
    .filter(Boolean);

lines 是一个没有空字符串的数组。

关于javascript - 从 Node.js 中的文件同步读取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34223065/

相关文章:

node.js - 单个redis命令是隔离执行的吗?

javascript - 查询字符串模块中的 stringify 在 Jest 测试中未按预期工作

javascript - 使用 API 时 data.forEach 不是函数

javascript - 通过过滤器的另一个对象过滤对象数组

javascript - 服务器端脚本是否需要在 "routes"中定义?

html - 如何为我的按钮设置字体大小限制

angularjs - 如何将 AngularJS 中的文件和表单数据发送到 Node.js 服务器?

javascript - 基础设施 igGrid : how to remove a row with javascript

javascript - 从平面 json 生成(多级)flare.json 数据格式

javascript - 想要在具有动态下拉菜单的 React-js 中获取 Textfield 的值