Javascript 如何使用node.js从.list文件中提取数据
我有一个.list文件,其中包含有关电影的信息。该文件的格式如下Javascript 如何使用node.js从.list文件中提取数据,javascript,node.js,csv,Javascript,Node.js,Csv,我有一个.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)
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);
});
但因为这些值是由单空格、双空格和制表符分隔的。没有可使用的单个分隔符。如何将这些信息提取到数组中?用正则表达式解析看起来很容易:
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*)
的意思是:匹配6个空格,然后捕获任意数量的数字,然后匹配2个空格,然后捕获另一个任意数量的数字,等等。您可以将多个空格压缩为一个空格,然后可以像字符串一样读取它
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);
});
});
这个列表文件是自动生成的,或者您已经手动创建了它?自动生成的,它是imdb找到的一个。我认为多个空格到一个选项卡会更好,否则“Shawshank Redemption(1994)”将被解析为四个字段。我决定在两个或多个空格数据上用逗号分隔。替换(/\s{2,}/g,“,”)-感谢您的回复:)很高兴听到这一点,我们将不胜感激:)