如何使用node.js从.list文件中提取数据

我有一个包含电影信息的.list文件。 该文件格式如下

New Distribution Votes Rank Title 0000000125 1176527 9.2 The Shawshank Redemption (1994) 0000000125 817264 9.2 The Godfather (1972) 0000000124 538216 9.0 The Godfather: Part II (1974) 0000000124 1142277 8.9 The Dark Knight (2008) 0000000124 906356 8.9 Pulp Fiction (1994) 

我到目前为止的代码如下:

 //modules ill be using var fs = require('fs'); var csv = require('csv'); csv().from.path('files/info.txt', { delimiter: ' '}) .to.array(function(data){ console.log(data); }); 

但是,因为值由单个空格分隔,所以双空格和制表符。 没有单独的分隔符可以使用。 我怎样才能将这个信息提取到一个数组?

您可以将多个空格缩小到一个空格,然后您可以像string一样读取它;

 fs = require('fs') fs.readFile('files/info.txt', 'utf8', function (err, csvdata) { if (err) { return console.log(err); } var movies = csvdata.replace(/\s+/g, "\t"); csv().from.string(moviews, { delimiter: '\t'}) .to.array(function(data){ console.log(data); }); }); 

用正则expression式parsing看起来很容易:

 function parse(row) { var match = row.match(/\s{6}(\d*)\s{2}(\d*)\s{3}(\d*\.\d)/) return { distribution: match[1], votes: match[2], rank: match[3] }; } fs.readFileSync(file) .split('\n') .slice(1) //since we don't care about the first row .map(parse); 

我会活着你来build立其余的正则expression式。 我用两个工具来做到这一点:rubular.com和node.js repl。

\s{6}(\d*)\s{2}(\d*)意思是:MATCH 6 SPACE,然后捕获任意数量的数字然后匹配2个空格,然后捕获另一个任意数量的数字等等。