【发布时间】:2016-03-17 08:07:19
【问题描述】:
我需要用 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 对我来说看起来并不优雅/可读。
有没有办法像其他编程语言一样从流中同步读取行?
如果没有内置解决方案,我愿意使用插件。
[编辑]
对不起,我应该更清楚地说明 我想避免事先将整个文件加载到内存中
【问题讨论】:
-
是的,用
fs.readFileSync加载它,然后在用换行符分割后用你的代码同步解析它,即lines = fs.readFileSync('graph.txt').split(/[\n\r]/);
标签: javascript node.js