批量读取csv文件指定列

2023-11-04

一、算法原理

在读取csv文件进行点云处理的时候,常常需要跳过表头,并且进行批量读取。本代码,将每行数据记录为一个数组,并将多个csv文件合并记录。
在使用中,需要自己修改想要提取的列数以及定义的参数。

二、代码实现

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
#include <iomanip>
#include <Eigen/Dense>

using namespace Eigen;

// 结构体用于存储CSV中的一行数据
struct CSVRow {
    std::string col1;
    std::string col2;
    std::string col3;
    std::string col4;
    std::string col5;
    std::string col6;
    std::string col7;
    std::string col8; 
    std::string col9;
    std::string col10;
    std::string col11;
    std::string col12;
    std::string col13;
    std::string col14;
    std::string col15;
    std::string col16;
    std::string col17;
    std::string col18;
    std::string col19;
    std::string col20;
    std::string col21;
    std::string col22;
    std::string col23;
    std::string col24;
    std::string col25;
};

// 读取CSV文件的指定列
std::vector<CSVRow> readCSVColumn(const std::string& filename) {
    std::vector<CSVRow> data;
    std::ifstream infile(filename);

    if (!infile) {
        std::cerr << "无法打开文件: " << filename << std::endl;
        return data;
    }

    // 跳过第一行
    std::string skipLine;
    std::getline(infile, skipLine);

    std::string line;
    while (std::getline(infile, line)) {
        std::istringstream iss(line);
        std::string col1, col2, col3, col4, col5, col6, col7, col8; 
        if (std::getline(iss, col1, ',') && std::getline(iss, col2, ',') &&
            std::getline(iss, col3, ',') && std::getline(iss, col4, ',') && std::getline(iss, col5, ',') &&
            std::getline(iss, col6, ',') && std::getline(iss, col7, ',') && std::getline(iss, col8, ',')) {
            std::string col9, col10, col11, col12, col13, col14, col15, col16, col17, col18, col19, col20, col21, col22, col23, col24, col25;
            std::getline(iss, col9, ',');
            std::getline(iss, col10, ',');
            std::getline(iss, col11, ',');
            std::getline(iss, col12, ',');
            std::getline(iss, col13, ',');
            std::getline(iss, col14, ',');
            std::getline(iss, col15, ',');
            std::getline(iss, col16, ',');
            std::getline(iss, col17, ',');
            std::getline(iss, col18, ',');
            std::getline(iss, col19, ',');
            std::getline(iss, col20, ',');
            std::getline(iss, col21, ',');
            std::getline(iss, col22, ',');
            std::getline(iss, col23, ',');
            std::getline(iss, col24, ',');
            std::getline(iss, col25, ',');

            data.push_back({ col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14, col15, col16, col17, col18, col19, col20, col21, col22, col23, col24, col25 });
        }
    }

    infile.close();
    return data;
}

int main() {
    std::vector<std::string> filenames = {
        "C:\\Users\\dell\\Desktop\\440882004003000100533.csv",
        "C:\\Users\\dell\\Desktop\\440882004003000100534.csv",
        //在此处添加需要处理的文件
    };

    std::vector<CSVRow> combinedData;
    for (const auto& filename : filenames) {
        std::vector<CSVRow> csvData = readCSVColumn(filename);
        combinedData.insert(combinedData.end(), csvData.begin(), csvData.end());
    }
    return 0;
}

三、注意事项

此代码只适用于读取csv文件,不涉及如何输出文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批量读取csv文件指定列 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 等长布线总结

    等长线是为了减少信号相对延时 常用在高速存储器的地址和数据线上 简单来说 等长线的作用 就是让信号传输的速度一致 I2C总线无需画等长线 虽然i2C信号与内存一样都是有相对时序要求 但由于信号频率较低 此时由导线长度引起的延时不足以影响正常
  • 面试专题 - Zookeeper

    因为zookeeper 后面简称zk 是一个功能比较优秀且强大的分布式组件 使用场景也很多 很受欢迎 所以相对来说关于zk的问题也就很多 下面总结归纳一些常见的面试问题 1 请简述ZooKeeper的选举机制 2 客户端对zk的server
  • 有关循环Random随机数重复的解决方案

    在做项目时 我逻辑服循环里面使用random时发现会随机出重复数 我在网上查了资料 然后使用的方法 float objRandomCount new Random Guid NewGuid GetHashCode Next 0 num 可以
  • 下拉列表框组件Spinner 简述及其简单应用

    下拉列表框组件Spinner 提供一系列下拉选项供用户选择 右下角有一个F角箭头 点击后显示出选项 下拉列表框组件Spinner 的简单应用 要求 建立一个下拉列表并填充内容 在下列列表的右边建立一个按钮 点击时显示所选中的内容 一 在ac
  • 【华为OD机试】分班【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 幼儿园两个班的小朋友在排队时混在了一起 每位小朋友都知道自己是否与前面一位小朋友是否同班 请你帮忙把同班的小朋友找出来 小朋友的编号为整数 与前一位小朋友同班用Y表示
  • 国产操作系统迎来新机遇 统一应用商店成软肋

    今天上午 中国工程院院士倪光南在某桌面操作系统发布会上表示 政府欲采购国产操作系统代替Windows 8系统 意味着政府和央企等部门将会大量使用国产操作系统 会给国内相关企业带来新的发展机遇 据悉 目前操作系统领域几乎已被国外科技公司所垄断
  • python菜鸟教程 pdf下载-Python实战-从菜鸟到大牛的进阶之路 pdf完整版

    Python是一种解释型 面向对象 动态数据类型的高级程序设计语言 现在它已经成为最受欢迎的程序设计语言之一 本专题收录了Python编程实战教程 分享给大家 适用人群 Python 进阶学习者 Web 开发程序员 运维人员 有志于从事互联
  • C++ day6

    将栈和队列封装成模板类 栈 include
  • 控制算法之PID算法

    控制算法之PID算法 从入门到理解到应用 一发入魂 云 社区 腾讯云 tencent com
  • 数据库基础(面试常见题)

    数据库基础 面试常见题 一 数据库基础 1 数据抽象 物理抽象 概念抽象 视图级抽象 内模式 模式 外模式2 SQL语言包括数据定义 数据操纵 Data Manipulation 数据控制 Data Control 数据定义 Create
  • dedecms单独调用指定文章

    dede arclist idlist 指定ID limit 0 1 a href field title a dede arclist
  • 过滤器Filter,登陆验证,过滤敏感词,动态代理,Listener

    Filter 过滤器 概念 生活中的过滤器 净水器 空气净化器 土匪 web中的过滤器 当访问服务器的资源时 过滤器可以将请求拦截下来 完成一些特殊的功能 过滤器的作用 一般用于完成通用的操作 如 登录验证 统一编码处理 敏感字符过滤 快速
  • 前端npm和yarn更换国内淘宝镜像

    由于npm和yarn自带镜像是国外的 下载各种包比较慢 针对国内开发的小伙伴 如果没有科学上网的话 通常都会换一下镜像源 让开发下载各种包飞起来 以下是配置国内 淘宝镜像 提升下载速度的具体方法 赶紧收藏起来吧 关注 技术宅小Y 获取更多新
  • 如何调试JavaScript代码

    1 通过alert 来查看程序中的变量 由此也可以推断出程序跑到哪里就报错 用法 alert 1 弹出窗口显示1 var a 2 alert a a 弹出窗口显示a 2 2 添加debugger来调试javaScript 比较推荐这个 实用
  • PCB走线宽度

    结论 1A电流 至少10mil 建议15mil 2A电流 至少30mil 建议50mil 3A电流 至少60mil 建议100mil 大于3A 建议采用铺铜或开窗的形式 小于10mil线宽 建议电流小于0 1A
  • 如果有一条告警流量你会怎么分析,请详细说明?

    先要判断攻击有没有成功 是攻击成功的告警 还是攻击不成功但是真实的攻击 看规则的告警的名称 分析攻击源IP和目的IP 如果攻击源IP是内网的话 则可能为有关键特征的业务系统 被判为恶意攻击 内网可能沦陷 已被入侵 可能是设备使用盗版软件或者
  • Yolov5的安装配置与使用

    文章目录 一 下载Yolov5 1 下载Yolov5源码 2 下载Yolov5预训练模型 二 安装Yolov5 三 测试Yolov5 1 Img图片测试 2 Video视频测试 3 摄像头测试 三 小结 四 参考链接 在下载配置Yolov5
  • Echarts 实现两个图表联动

    init obj pageSource var that this console log obj pageSource this chart this echarts init document getElementById this i
  • 使用C++ Eigen库求解线性方程组Ax=b

    Eigen http eigen tuxfamily org 是常用的 C 矩阵运算库 具有很高的运算效率 大部分 需要在 C 中使用矩阵运算的库 都会选用 Eigen 作为基本代数库 例如 Google Tensorflow Google
  • 批量读取csv文件指定列

    目录 一 算法原理 二 代码实现 三 注意事项 一 算法原理 在读取csv文件进行点云处理的时候 常常需要跳过表头 并且进行批量读取 本代码 将每行数据记录为一个数组 并将多个csv文件合并记录 在使用中 需要自己修改想要提取的列数以及定义