AM试图从CSV文件中绘制一些点。由于文件大小较大(> 2GB),因此将文件内容加载到向量std::vector<std::vector<std::string> >parsedCsv
时会出现内存不足异常。
所以我想,可以将文件直接从CSV进行绘制,而不是将文件读取为矢量然后进行绘制。我正在寻找下面glVertex3f(x,y,z)
std::ifstream data("D:\\Files\\Dummy2.csv");
std::string line;
while (std::getline(data, line))
{
std::stringstream lineStream(line);
std::string cell;
std::vector<std::string> parsedRow;
while (std::getline(lineStream, cell, ','))
{
glBegin(GL_POINTS);
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3f(----how to represent the points--?)
glEnd();
}
CSV文件已经具有所需的格式:
x1,y1,z1
x2,y2,z2
x3,y3,z3
-------
----
--
有什么建议吗?
答案 0 :(得分:1)
您可以使用stof
将字符串值转换为浮点数。将单元格编号推入vector
。顶点顶点坐标的分量存储在vector
中,并且可以由glVertex3fv
绘制:
std::ifstream data("D:\\Files\\Dummy2.csv");
std::string line;
while (std::getline(data, line))
{
std::stringstream lineStream(line);
std::string cell;
std::vector<float> parsedRow;
while (std::getline(lineStream, cell, ','))
parsedRow.push_back(std::stof(cell));
if (parsedRow.size() == 3)
{
glBegin(GL_POINTS);
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3fv(parsedRow.data());
glEnd();
}
}
请注意,如果stof
无法执行转换,则会引发无效的参数异常。