Node处理csv文件(利用csv-parse读取指定字符串内的文件片段)

2023-11-10

需求:读取一个csv文件,需要从指定字符串开始读取至指定字符串结束,由于csv文件可能使用不同环境打开编辑过,末尾包含很多多余的分隔逗号,去除这些逗号。

// 使用 Stream
const parse = require('csv-parse');
const path = require('path');
const fs = require('fs');
const fsPromises = fs.promises;

readAndParseCSV();

async function readAndParseCSV() {
  try {
    // STEP 1: 读取csv文件
    const inputFilePath = path.resolve('./DATA/1.csv');
    const input = fs.readFileSync(inputFilePath, {encoding: 'utf-8'} )
    arr = input.split(/\r?\n/)
    for (var i=0; i< arr.length; i++) {
      if (arr[i].indexOf('Result ID') != -1) {
        startLine = i + 1
      } else if (arr[i].indexOf(' These records were obtained from') != -1)
      {
        endLine = i
      }
    }
    console.log('文件读取起始行:', startLine);
    console.log('文件读取结束行:',endLine);
    //console.log(arr);

    // STEP 2:CSV和 parser
    var output = []
    const parser = parse({
      delimiter: ',',
      relax_column_count: true,
      trim: true,
      from_line: startLine,
      to_line: endLine,
      skip_empty_lines: true,

    });

    // STEP 3:读取事件,读取内容存入output
    parser.on('readable', function () {
      let record;
      while ((record = parser.read())) {
        output.push(record)
      }
    });

    // STEP 4:捕获错误
    parser.on('error', function (err) {
      console.error(err.message);
    });

    // STEP 5:取得 output 的結果
    parser.on('end', function () {
      //遍历二维数组去除空值
      for (var i=0;i<output.length;i++) {
        for (var j=0;j<output[i].length;j++) {
          if (output[i][j]== 0) {
            output[i].splice(j,1);
            j=j-1
          }
        }
          if (output[i]== 0) {
            output.splice(i,1);
            i=i-1
           }
      }
      console.log(output);
    });

    // STEP 6:放入准备读取的内容
    parser.write(input);

    // STEP 7:关闭readable stream
    parser.end();
  } catch (error) {
    console.log('error', error);
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node处理csv文件(利用csv-parse读取指定字符串内的文件片段) 的相关文章

随机推荐

  • SpringBoot整合Redis

    要在Spring Boot中整合Redis 可以按照以下步骤进行操作 一 在pom xml文件中添加Redis的依赖
  • 轻舟已过万重山

    罗翔说 其实没什么好后悔的 很多事就算时间能重来一遍 以当时的心智和阅历 还是会做同样的选择 避免不了同样的结果 人本来就是在失败中学乖的 与其抱着过去后悔 不如擦擦眼泪向前走吧 我时常在想 我是过了365天 还是把一天过了365遍 这种一
  • 修改bug的一个小故事

    今天在网站上看见一个故事 很有趣 但也值得思考 那还是80年代初期 我爸爸在一家存储设备公司工作 这个公司现在已经不存在了 它生产磁带机和驱动这些磁带高速运转的气动系统 这是那个时代的产物 他们技术改造了磁带驱动器 使得你可以只有一个中心驱
  • HAProxy--理论--01--简介

    HAProxy 理论 01 简介 1 HAProxy 是一款提供高可用性 负载均衡以及基于TCP 第四层 和HTTP 第七层 应用的代理软件 支持虚拟主机 它是免费的 适用于那些负载特大的web站点 这些站点通常又需要会话保持或七层处理 H
  • 模拟实现strchar函数

    strchar 查找字符串 s 中首次出现字符 c 的位置 函数实现 char my strchar const char str char c assert str while str if str c return str else s
  • STL(二) map容器插入、删除小技巧

    这里写目录标题 STL 二 map容器插入 删除小技巧 一 map插入 1 用数组方式插入数据 2 在insert函数中使用make pair 函数 3 插入前先查找该key值 是否已存在 4 insert or assign直接插入 如果
  • VueJS 中的动画菜单效果的实现

    英文 https mattmaribojoc medium com animated active menu highlights in vuejs daily vue tips 1 accd47fac612 最近 我在写一个项目 我想要一
  • 解决springboot2.x集成redis节点故障redisTemplate报错redis Command timed out

    pringboot2 x集成redis redis节点故障 集群状态ok的情况下 程序使用redisTemplate操作redis一直报错 Redis command timed out nested exception is io let
  • 若依框架注册功能的实现并且给分配菜单可见菜单权限

    前端设置 打开 ruoyi ui 模块 然后 找到 views 文件夹 然后找到 login vue 文件 在 94 行左右的位置 找到 register 属性 将其从 false 改为 true 后端设置 找到数据库中的sys confi
  • flutter mac 环境变量配置

    open bash profile export FLUTTER ROOT Applications flutter export PUB HOSTED URL https pub flutter io cn export FLUTTER
  • MySQL数据库基础知识9,InnoDB和MyISAM的数据分布对比

    目录 一 InnoDB存储引擎 二 MyISAM存储引擎 1 MyISAM简介 2 MyISAM压缩表 三 InnoDB的数据分布 四 MyISAM数据分布 五 顺序的主键什么时候会造成更坏的结果 MySQL进阶实战系列文章 哪吒精品系列文
  • Jupyter notebook项目文件默认路径更改(win10,Anaconda)

    Jupyter notebook项目文件默认路径更改 问题描述 解决方法 参考 问题描述 在jupyter notebook中 其默认文件路径是保存在C盘的C Users xxx路径当中 这会导致入门小白被jupyter中许多文件夹搞得云里
  • matlab如何提取某一列的数据_MATLAB如何提取某一矩阵的某一列的部分数据?

    展开全部 使用2113a M N 可以提取矩阵a中符合5261M 4102N要求的部分 最简单1653是M N都是标量 就是一回个数例如 答 a 1 1 a 2 3 分别返回a矩阵1行1列的单元 和 2行3列的单元 M N还可以是矢量 例如
  • C++11实用技术(四)for循环该怎么写

    普通用法 在C 遍历stl容器的方法通常是 include
  • ubuntu使用systemd设置开机启动

    title ubuntu使用systemd设置开机启动 date 2021 11 17 18 57 11 tag ubuntu categories Ubuntu System 在项目过程中 经常会碰到需要设置开机启动脚本 以下将介绍使用s
  • ts文件格式解析

    TS格式解析 by ahuner 1 TS格式介绍 TS 全称为MPEG2 TS TS即 Transport Stream 的缩写 它是分包发送的 每一个包长为188字节 还有192和204个字节的包 包的结构为 包头为4个字节 第一个字节
  • yum—repo—yum源

    RHEL 官方扩展源 yum localinstall http dl fedoraproject org pub epel 7 x86 64 e epel release 7 5 noarch rpm y RepoForge源 http
  • Anaconda创建python3.10环境 ,pip报错:ImportError: DLL load failed while importing _ctypes: 找不到指定的模块。

    一 问题 gt pip Traceback most recent call last File D Users tangtang1600 Anaconda3 envs automatic1 Scripts pip script py li
  • 刷脸支付紧跟市场风口和大趋势

    说起聚合支付 可能有些人会觉得十分陌生 但是又觉得有一丝熟悉感 陌生感来源于自己似乎从没听说过聚合支付 熟悉感来自于 你曾经使用过并且不止一次 当我们早餐店或是水果店买水果 用支付宝或微信扫码支付后 会跳转出一个新的页面 当时的你也许没有在
  • Node处理csv文件(利用csv-parse读取指定字符串内的文件片段)

    需求 读取一个csv文件 需要从指定字符串开始读取至指定字符串结束 由于csv文件可能使用不同环境打开编辑过 末尾包含很多多余的分隔逗号 去除这些逗号 使用 Stream const parse require csv parse cons