Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用node.js从.list文件中提取数据_Javascript_Node.js_Csv - Fatal编程技术网

Javascript 如何使用node.js从.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)

我有一个.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);
});

但因为这些值是由单空格、双空格和制表符分隔的。没有可使用的单个分隔符。如何将这些信息提取到数组中?

用正则表达式解析看起来很容易:

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,“,”)-感谢您的回复:)很高兴听到这一点,我们将不胜感激:)