答案:使用fstream和stringstream逐行读取并解析CSV文件,将数据存储在二维vector中,注意路径正确性和字段内逗号问题。

在C++中读取CSV文件,通常使用标准库中的fstream来操作文件,并通过getline函数按行或按字段分割数据。CSV文件以逗号分隔字段,每行代表一条记录。下面介绍一种简单、实用的读取方法。
包含必要的头文件
读取CSV需要处理文件输入和字符串操作,因此要引入以下头文件:
- #include <fstream>:用于文件读取
- #include <sstream>:用于字符串流处理
- #include <string>:处理字符串
- #include <vector>:存储多行或多列数据
逐行读取并解析CSV内容
使用std::getline配合字符串流std::stringstream可以方便地拆分每行的字段。以下是一个完整示例:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
int main() {
std::ifstream file("data.csv"); // 打开CSV文件
std::string line, field;
std::vector<std::vector<std::string>> data; // 存储所有数据
if (!file.is_open()) {
std::cerr << "无法打开文件!" << std::endl;
return -1;
}
while (std::getline(file, line)) { // 逐行读取
std::vector<std::string> row;
std::stringstream ss(line);
while (std::getline(ss, field, ',')) { // 按逗号分割字段
row.push_back(field);
}
data.push_back(row); // 将一行数据加入总数据
}
file.close();
// 输出读取结果(测试用)
for (const auto& row : data) {
for (const auto& field : row) {
std::cout << field << "\t";
}
std::cout << std::endl;
}
return 0;
}
注意事项与优化建议
实际使用中需注意一些细节:
立即学习“C++免费学习笔记(深入)”;
- 确保CSV文件路径正确,相对路径基于可执行文件位置
- 字段中若包含逗号(如被引号包围的文本),上述方法可能出错,需增强解析逻辑
- 可将每行数据转换为
struct或类对象,便于后续处理 - 大文件时考虑内存使用,可逐行处理而不全部加载











