如何使用node.js从文件构建地图对象?

时间:2016-03-16 00:55:48

标签: javascript node.js

我有多个列(通常为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一般,但真的很想接受它。任何一般建议,链接或任何其他帮助将不胜感激。

0 个答案:

没有答案