我有多个列(通常为9)的制表符分隔文件。文件大小可以是几百兆字节,通常不到1 Gb,这是几千到几百万行。几行(随机数行)描述了一个特定的事物。每一行都会有一些信息,我想将几行信息整理成单个对象,因为它更易于使用。这是我最初的尝试:
const fs = require('fs');
const events = require("events");
const readline = require('readline');
// get second argument on the command line
var myFile = process.argv[2];
const rl = readline.createInterface({
input: fs.createReadStream(myFile)
});
myObject = {};
rl.on('line', (line) => {
var items = line.split("\t");
if(!(items[0] in myObject)) {
myObject[items[0]]=items[3];
};
});
我学会how to read in large file,我有点理解node.js events thing,但我的问题是随机数行被组合在一起,但不必是顺序行文件。所以这是一种前瞻性的功能,但再看向前看可能需要查看整个文件,我相信效率不高。
阅读node.js events post, very similar to my problem后。我想出了这个。
var myFile = process.argv[2];
var myEvent = new events.EventEmitter();
const rl = readline.createInterface({
input: fs.createReadStream(myFile)
});
rl.on('line', function(line) {
var items = line.split("\t");
myObject = {
id = items[0],
name = items[2],
other = items[7]
};
myEvent.emit('data', myObject);
});
myEvent.on('data', function(myObject) {
console.log(myObject);
}
我想我已经开始理解rl
类的readline
实例如何包含事件,.on
事件line
您可以从文件中获取每一行。然后,您可以emit
将新制作的对象进行进一步处理。我无法弄清楚如何操纵几行,即如何将所有内容存储在一个全局对象中。
p.s newbie at node.js和js一般,但真的很想接受它。任何一般建议,链接或任何其他帮助将不胜感激。