c++ - 将 CSV 文件读入 2D 矢量
问题描述
我的文件内容如下:
Barr,3145,7
Rab,12,5513,1412,221,232,179,7121231
Bean,1,1231,219,21,337,9239,312,764,640391,4,7966346,22278,5,116364,56350
Earl,132,230,121,32,425,67
Donut,112,5525,23121,2123,65432,8790,3,4567,444
我希望每一行都存储在(vector<vector<string>>)
没有逗号的二维向量中。
我试过做:
while(getline(filestream, line)){
stringstream linestream(line);
while(getline(linestream, anotherLine, ','){
oneDvector.push_back(anotherLine);
}
twoDvector.push_back(oneDvector);
oneDvector.clear();
}
但这似乎不起作用。我能做些什么?
解决方案
恕我直言,您不想使用二维向量或数组。你想要std::vector
一个类:
struct Record
{
std::string text;
std::vector<int> data;
friend std::istream& operator>>(std::istream& input, Record& r);
};
std::istream& operator>>(std::istream& input, Record& r)
{
std::string text_line;
std::getline(input, text_line);
std::istringstream text_stream(text_line);
std::getline(text_stream, r.text, ',');
int value;
char comma;
while (text_stream >> value)
{
r.data.push_back(value);
text_stream >> comma;
}
return input;
}
注意:在上面的输入函数中,一条记录被逐行读入一个字符串。这将使数字的阅读更容易。
您的输入循环可能如下所示:
Record r;
std::vector<Record> database;
while (file_stream >> r)
{
database.push_back(r);
}
通常,根据输入记录对结构进行建模会产生更好的程序。更容易开发和调试。
可以通过用空格替换第二次出现和剩余的逗号来简化输入。第一个逗号用于结束文本字段。
推荐阅读
- python - 我想将下面的代码(神经网络)从 keras 转换为 pytorch
- sql - 如何在从 AS400 读取的 SQL Server 中修复“在 T2 类型 *N 中未找到 RIGHT”?
- ios - 下载每个图像后重新加载 tableview
- .net-assembly - 装配说明 最大尺寸
- sql - Mod功能和选择
- c# - 创建可重用的 WPFToolkit 控件
- reactjs - Expo导入错误:不变的违规元素类型无效预期字符串(用于内置组件)
- c# - 使文本网格中的文本停留几秒钟
- java - 从单个整体式 springboot 应用程序对两个独立数据库中的表执行写入操作
- amazon-ec2 - 如何在 AWS 子网中创建 gRPC 网络连接?