新闻中心

C++如何读取CSV文件数据_C++解析逗号分隔数据的实现

2025-11-29
浏览次数:
返回列表
首先使用fstream逐行读取CSV文件,再通过stringstream按逗号分割字段,将数据存储于二维字符串向量中;为处理引号和空格,引入trim函数清理首尾空白与引号;对于数值转换,采用std::stod或std::stoi并结合异常处理确保健壮性;针对含逗号的字段被引号包围的情况,简单方法难以准确解析,需状态机或专用库支持;最终示例展示读取并打印全部内容的基本流程,适用于简单场景,复杂情况推荐使用fast-cpp-csv-parser等成熟库。

c++如何读取csv文件数据_c++解析逗号分隔数据的实现

读取CSV文件在C++中没有内置支持,需要手动解析。CSV文件通常以逗号分隔字段,每行代表一条记录。实现时需考虑换行、空格、引号包裹的字段等常见情况。下面介绍一种简单而实用的方法来读取和解析CSV数据。

使用fstream读取CSV文件

通过std::ifstream打开并逐行读取CSV文件。每一行用std::getline获取,再按逗号拆分字段。

示例代码:

<font face="Courier New">
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
<p>std::vector<std::vector<std::string>> readCSV(const std::string& filename) {
std::vector<std::vector<std::string>> data;
std::ifstream file(filename);
std::string line;</p><pre class='brush:php;toolbar:false;'>while (std::getline(file, line)) {
    std::vector<std::string> row;
    std::stringstream ss(line);
    std::string cell;

    while (std::getline(ss, cell, ',')) {
        row.push_back(cell);
    }
    data.push_back(row);
}

return data;

}

这段代码将CSV内容读入二维字符串向量,方便后续处理。

处理带引号的字段

实际CSV中,包含逗号的字段常被双引号包围,例如:"Smith, John"。上述简单分割会出错。改进方法是使用完整的CSV解析逻辑,或借助状态机判断是否在引号内。

简化处理方式:先提取完整字段,再去除首尾空格和引号。

可以添加一个清理函数:

GoEnhance GoEnhance

全能AI视频制作平台:通过GoEnhance AI让视频创作变得比以往任何时候都更简单。

GoEnhance 347 查看详情 GoEnhance
<font face="Courier New">
std::string trim(const std::string& str) {
    size_t start = str.find_first_not_of(" \t\"");
    size_t end = str.find_last_not_of(" \t\"");
    if (start == std::string::npos) return "";
    return str.substr(start, end - start + 1);
}
</font>

在插入cell前调用trim(cell)可提升数据整洁度。

解析数值类型数据

若CSV中包含数字,可用std::stodstd::stoi转换字符串。

例如将某列转为double:

<font face="Courier New">
double value = std::stod(data[rowIndex][colIndex]);
</font>

注意加入异常处理以防转换失败:

<font face="Courier New">
try {
    double value = std::stod(cell);
} catch (const std::invalid_argument&) {
    // 处理无法转换的情况
}
</font>

完整使用示例

读取文件并打印所有内容:

<font face="Courier New">
int main() {
    auto csvData = readCSV("data.csv");
<pre class='brush:php;toolbar:false;'>for (const auto& row : csvData) {
    for (const auto& cell : row) {
        std::cout << "[" << cell << "] ";
    }
    std::cout << "\n";
}

return 0;

}

基本上就这些。对于简单场景,这种实现足够高效且易于理解。复杂需求(如嵌套引号、换行字段)建议使用专用库如fast-cpp-csv-parser。自己实现时注意边界情况,确保程序健壮性。

以上就是C++如何读取CSV文件数据_C++解析逗号分隔数据的实现的详细内容,更多请关注其它相关文章!


# 适用于  # 汾阳互联网网站推广指导  # 新疆如何进行seo排名  # 房子营销推广词怎么说的  # 河间智能化网站建设  # seo站长推广  # 文山营销推广排名  # 南和网站建设联系人  # 如何短视频营销推广赚钱  # 天猫粉丝推广营销  # 长宁区工业网站建设  # 健壮性  # 相关文章  # 这段  # c++  # 推荐使用  # 迭代  # 换行  # 解决方法  # 重写  # 有什么  # stream  # win  # ios  # ai  # csv  # csv文件 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 淘宝支付提示失败如何解决 淘宝支付流程优化方法  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  深入理解Google Cloud Datastore查询:祖先路径与数据一致性  菜鸟取件码是什么怎么查 最全查询渠道汇总  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】  Python getattr() 异常处理深度解析:避免程序意外退出  sublime怎么设置启动时打开的窗口_sublime会话管理与热退出  苹果手机如何防止被恶意App追踪  漫蛙漫画登录站点 漫蛙2正版漫画快速访问  Win10桌面图标出现小盾牌怎么办 Win10去除UAC图标教程【解决】  手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议  mcjs网页版在线存档 mcjs云存档登录入口  Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法  狙击外星人小游戏开始_狙击外星人小游戏立即开始  谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航  在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析  PHP中获取MongoDB服务器运行时间(Uptime)的专业指南  文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染  Golang如何使用const iota_Go iota常量计数器讲解  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  Django通过AJAX异步上传图片并保存至模型的完整指南  2026年CSGO开箱网站推荐 CSGO开箱平台精选  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比  快手赚钱渠道_快手收益来源  Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】  J*aScript中如何高效提取对象指定属性  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用  铁路12306官网网页端快速入口 铁路12306官方首页登录教程  J*aScript对象创建方式_J*aScript设计模式应用  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract  厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新  如何在J*a中使用Locale处理多语言环境  漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接  Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南  俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问  Python模块化编程:有效管理依赖与避免循环引用  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】  马斯克:Optimus 人形机器人复数形式为 Optimi 

搜索