C++ 获取C+中.csv文件的列数和行数+;
我尝试编写C++代码,将从.cv文件中的值输入到C++中的矩阵。.csv文件包含浮点值,其大小通常大于100x100。 我无法从.csv文件中获取行数和列数。它们来自Matlab代码,该代码生成大约10个大小不同的.csv文件。因此,我需要能够自动地获得.CSV文件的大小(行和列),以便可以在C++代码中删除2D数组。p> < C++代码是:C++ 获取C+中.csv文件的列数和行数+;,c++,matlab,csv,C++,Matlab,Csv,我尝试编写C++代码,将从.cv文件中的值输入到C++中的矩阵。.csv文件包含浮点值,其大小通常大于100x100。 我无法从.csv文件中获取行数和列数。它们来自Matlab代码,该代码生成大约10个大小不同的.csv文件。因此,我需要能够自动地获得.CSV文件的大小(行和列),以便可以在C++代码中删除2D数组。p> < C++代码是: #include <fstream> #include <vector> #include <string>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <stdlib.h>
#include <iostream>
/*const int ROWS = 2;
const int COLS = 7;*/
const int BUFFSIZE = 80;
int main()
{
char buff[BUFFSIZE];
std::ifstream file("file.csv");
std::string line;
int col = 0;
int row = 0;
int a = 0, b = 0;
while (std::getline(file, line))
{
std::istringstream iss(line);
std::string result;
while (std::getline(iss, result, ','))
{
col = col + 1;
std::cout << col;
}
row = row + 1;
std::cout << "\n";
col = 0;
}
float array[row][col];
while (std::getline(file, line))
{
std::istringstream iss(line);
std::string result;
while (std::getline(iss, result, ','))
{
array[a][b] = atof(result.c_str());
b = b + 1;
}
a = a + 1;
b = 0;
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
std::cout << array[i][j] << " ";
}
std::cout << "\n";
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
/*const int ROWS=2;
常数int COLS=7*/
常数int BUFFSIZE=80;
int main()
{
字符buff[BUFFSIZE];
std::ifstream文件(“file.csv”);
std::字符串行;
int col=0;
int行=0;
int a=0,b=0;
while(std::getline(文件,行))
{
标准::istringstream iss(线);
std::字符串结果;
while(std::getline(iss,result,,'))
{
col=col+1;
std::cout您忘记在第二个循环之前向后移动流的位置。在最后一个while()
循环完成后,流到达末尾。您现在必须清除错误状态并向后移动(您也可以关闭并重新打开文件):
file.clear();
seekg(0,std::ios\u base::beg);
此外,不能将运行时变量用作静态数组维度。如果编译器支持,则使用非标准扩展。必须动态分配或使用向量:
std::vector数组(行,std::vector(列))
您可以计算任何行中的逗号数,“count+1”将是.csv文件中的列数
对于行数,您可以简单地编写如下内容-
int rows=0;
ifstream file("xyz.csv");
string line;
while (getline(file, line))
rows++;
此处“rows”是.csv文件中的行数
如果需要示例,请检查存储库。removecol=0;
语句。代码对col进行计数,然后将col设置为零。不能将运行时变量用作静态数组维度。必须动态分配或使用向量:std::vector数组(行,std::vector(col))
我真的不明白您使用运行时变量作为静态数组维度是什么意思。您能详细说明一下吗?另外,我将实现您建议的命令;并发布输出。用于创建数组的变量应该是常量或文字(意思是5
,10
,23
等)这两种特性都允许在编译时知道它们的值。C++标准不允许可变长度数组(数组的维数不是“代码> const < />代码>”)。。某些编译器具有允许您执行此操作的扩展,但它们不符合标准。我对代码进行了编辑并发布了它。但是,我遇到了错误。关于数组声明,您建议的两个是模板参数无效。2个是指数组未在main的范围内声明()
@Mysticssasuke请不要用更新的代码对原始问题进行编辑,这只会使新访问者对您的问题产生混淆。您可以发布更新的代码并为我设置一个链接。@Mysticssasuke但是现在我已经看到您在创建向量时犯了错误。您忘记了对类型的第二次关闭
。