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

读取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
全能AI视频制作平台:通过GoEnhance AI让视频创作变得比以往任何时候都更简单。
347
查看详情
<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::stod或std::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


2025-11-29
浏览次数:次
返回列表
tream>
#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;