解析CSV文件在C++中可通过标准库逐行读取并用逗号分割字段,示例代码使用std::ifstream和std::stringstream实现基础解析,支持将数据存储为vector或结构体;对于带引号的复杂字段需额外处理,建议简单场景用标准库,复杂场景使用专用库如csv-parser。

解析CSV文件在C++中可以通过标准库完成,不需要额外依赖。关键思路是逐行读取文件,再按逗号分割每行的数据。下面是一个简单、实用的方法。
使用std::ifstream打开文件,用std::getline逐行读取。每一行再用字符串流std::stringstream配合getline以逗号为分隔符拆分字段。
示例代码:
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
void parseCSV(const std::string& filename) {
std::ifstream file(filename);
std::string line;
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);
}
// 打印这一行的数据
for (const auto& field : row) {
std::cout << field << " ";
}
std::cout << "\n";
}
}
标准的CSV允许字段用双引号包围,尤其是字段中包含逗号或换行时。上面的方法对简单CSV有效,但无法正确处理"John, Doe"这样的字段。
要支持引号,需要更复杂的解析逻辑,比如手动状态机或使用第三方库。但大多数情况下,如果数据不包含引号或特殊字符,基础方法已足够。
立即学习“C++免费学习笔记(深入)”;
你可以把每一行解析成std::vector<std::vector<std::string>>,表示整个表格。也可以定义结构体,比如:
struct Person {
std::string name;
int age;
std::string city;
};
读取时转换类型:
while (std::getline(file, line)) {
std::stringstream ss(line);
std::string name, ageStr, city;
std::getline(ss, name, ',');
std::getline(ss, ageStr, ',');
std::getline(ss, city, ',');
Person p{ name, std::stoi(ageStr), city };
// 存入vector或其他容器
}
使用前检查文件是否成功打开:
std::ifstream file(filename);
if (!file.is_open()) {
std::cerr << "无法打开文件: " << filename << "\n";
return;
}
确保每行字段数量一致,避免std::stoi等转换函数抛出异常,可加try-catch或检查字符串有效性。
基本上就这些。简单CSV用标准库轻松搞定,复杂情况建议用专用库如csv-parser(开源)提升健壮性。
以上就是如何用C++解析一个逗号分隔的CSV文件的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号