我有一个.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);
});
但是因为值是由单个空格分隔的,所以是双空格和制表符。没有单独的分隔符可供使用。如何将此信息提取到数组中?
答案 0 :(得分:3)
您可以将多个空格缩小到一个空格,然后您可以将其读作字符串;
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);
});
});
答案 1 :(得分:0)
使用正则表达式解析起来很容易:
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);
我会让你继续建立其余的正则表达式。我使用两个工具来执行此操作:rubular.com和node.js repl。
此\s{6}(\d*)\s{2}(\d*)
表示:MATCH 6 SPACE,然后捕获任意数量的数字,然后匹配2个空格,然后捕获另一个任意数量的数字等。