node.js - 获取 CSV header 而不读取整个 Stream

标签 node.js fs node-csv-parse

我正在使用 csv-parser Node 模块来捕获流式 csv 文件的 header ;我正在使用模块中内置的“标题”事件发射器。

我正在循环遍历通过 getHeaders() 函数传递的 csv 读取流数组。在捕获流式 csv 的 header 后,我想关闭该流,然后将下一个 csv 流传递到函数中,以便我可以获得这些 header ,然后关闭流,依此类推...

最好的方法是什么?我尝试了几种不同的方法,包括 .destroy(),但我还没有找到有效的解决方案。也许我试图在错误的位置关闭流?这是我所拥有的:

function getHeaders(dataStream) {
    return new Promise((resolve, reject) => {
        dataStream
            .pipe(csv())
            .on('headers', (headers) => {
                let headerArray = Array.prototype.slice.call(headers);
                resolve(headerArray);                
                dataStream.destroy();
            })
            .on('error', (err) => {
                reject(`err from readingFile ${err}`)
            })          
    });
}

最佳答案

读取流的前两行,然后将数组作为可读流传输到 csv 怎么样?

试试这个:

const lineReader = require('readline');
const Stream = require('stream')

function getHeaders(dataStream) {
    return new Promise((resolve, reject) => {
       let wantedLines = [];
       lineReader.createInterface({
         input: dataStream
       });
       lineReader.on('line', (line) => {
         if(wantedLines.length >= 2) {
           lineReader.close();
         }
       });
       lineReader.on('close', () => {
          let resolved = false;
          const readableStream = new Stream.Readable();
          readableStream
            .pipe(csv())
            .on('headers', (headers) => {
              if (!resolved) resolved = true;
              resolve(headers);
            })
            .on('error', reject);
            .on('close', () => {
              if (!resolved) resolve([]);
            });
          wantedLines.forEach(line => readableStream.push(line));
          readableStream.destroy();
       });
    });
}

尚未检查,如有错误请评论。

关于node.js - 获取 CSV header 而不读取整个 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587753/

相关文章:

javascript - csv-parse 解析的对象的第一个属性不可访问

javascript - csv-parse 抛出无效的开场白 : a quote is found inside a field at line

node.js - 通过 Sequelize 中的属性排除

node.js - Sails.js 中的唯一属性失败

javascript - "submit and post to Facebook"按钮

javascript - 使用 nodejs 路径模块返回目录

javascript - 什么时候使用 process.nextTick 最好?

node.js - 无法使用 webpack 和 React 解析 'fs'

javascript - Node.js - 在循环中读写数千/数百万个 JSON 文件

javascript - npm csv-parse 不读取所有行