Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.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 来自stdin的xlsx js解析_Javascript_Node.js_Xlsx - Fatal编程技术网

Javascript 来自stdin的xlsx js解析

Javascript 来自stdin的xlsx js解析,javascript,node.js,xlsx,Javascript,Node.js,Xlsx,我正在尝试使用xlsx js(v0.8.0)解析一个文件,该文件通过stdin管道传输 以下代码: const data = fs.readFileSync('/dev/stdin').toString(); wb = xlsx.read(data, {type: 'binary'}); 将文件(在mac上)管道化为cat foo.xlsx | node test.js时失败: ``` 抛出新错误(“损坏的zip:找不到central directo的结尾 ^错误:损坏的zip:在

我正在尝试使用xlsx js(v0.8.0)解析一个文件,该文件通过stdin管道传输

以下代码:

const data = fs.readFileSync('/dev/stdin').toString();
wb = xlsx.read(data, {type: 'binary'});      
将文件(在mac上)管道化为cat foo.xlsx | node test.js时失败:

```

抛出新错误(“损坏的zip:找不到central directo的结尾 ^错误:损坏的zip:在Object.ZipEntries.readEndOfCentral上找不到中心目录的结尾 (/Volumes/Macintosh_HD/Users/shauncutts/src/crane parse monthly/node_modules/jszip/lib/zipEntries.js:135:19) 在Object.ZipEntries.load (/Volumes/Macintosh_HD/Users/shauncutts/src/crane parse monthly/node_modules/jszip/lib/zipEntries.js:197:14) 在Object.ZipEntries (/Volumes/Macintosh_HD/Users/shauncutts/src/crane parse monthly/node_modules/jszip/lib/zipEntries.js:21:14) 在Object.module.exports[作为加载] (/Volumes/Macintosh_HD/Users/shauncutts/src/crane parse monthly/node_modules/jszip/lib/load.js:11:18) 在Object.JSZip (/Volumes/Macintosh_HD/Users/shauncutts/src/crane parse monthly/node_modules/jszip/lib/index.js:39:14) 在read_zip (/Volumes/Macintosh_HD/Users/shauncutts/src/crane parse monthly/node_modules/xlsx/xlsx.js:11375:38) 在Object.readSync[读取时] (/Volumes/Macintosh_HD/Users/shauncutts/src/crane parse monthly/node_modules/xlsx/xlsx.js:11396:11)

但是,我可以通过以下方式读取相同的文件:

wb = xlsx.readFile(fn);

没有问题。我应该如何修改代码才能读取管道文件?

再次感谢@LazarevAlexandr…事实上,问题在于。以下代码可以工作:

  let wb;
  const chunks = [];
  process.stdin
    .on("data", function(chunk) { chunks.push(chunk); })
    .on("end", function() { 
      const buffer = Buffer.concat(chunks);
      wb = xlsx.read(buffer, {binary: true});

      // (call your favorite async continuation method here...)
    });

(注意——在@mbostock的测试中尝试将二进制选项传递给readFileSync,但仍然在65535处停止)。

您是否尝试过设置二进制编码:
fs.readFileSync('/dev/stdin').toString('binary');
?@LazarevAlexandr——听起来很有希望,但是
toString('binary')
toString('ascii'))
worked…..
fs.readFileSync(“/dev/stdin”)似乎有问题< /代码>:当读取为文件时,字符串为65536长度vs 1746435。这可能是在二进制数据中间的某个EOF字符中被卡住了,或者是65536的内部缓冲区大小?嗯……有什么建议吗?是的,最可能的问题是从文件中获取二进制字符串。尝试将<代码>二进制< /代码>编码作为OPT。
readFileSync
的ion参数,不在其后面调用
toString()
。如下所述: