Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取C+中.csv文件的列数和行数+;_C++_Matlab_Csv - Fatal编程技术网

C++ 获取C+中.csv文件的列数和行数+;

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>

我尝试编写C++代码,将从.cv文件中的值输入到C++中的矩阵。.csv文件包含浮点值,其大小通常大于100x100。 我无法从.csv文件中获取行数和列数。它们来自Matlab代码,该代码生成大约10个大小不同的.csv文件。因此,我需要能够自动地获得.CSV文件的大小(行和列),以便可以在C++代码中删除2D数组。p> < C++代码是:

 #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文件中的行数


如果需要示例,请检查存储库。

remove
col=0;
语句。代码对col进行计数,然后将col设置为零。不能将运行时变量用作静态数组维度。必须动态分配或使用向量:
std::vector数组(行,std::vector(col))
我真的不明白您使用运行时变量作为静态数组维度是什么意思。您能详细说明一下吗?另外,我将实现您建议的命令;并发布输出。用于创建数组的变量应该是常量或文字(意思是
5
10
23
等)这两种特性都允许在编译时知道它们的值。C++标准不允许可变长度数组(数组的维数不是“代码> const < />代码>”)。。某些编译器具有允许您执行此操作的扩展,但它们不符合标准。我对代码进行了编辑并发布了它。但是,我遇到了错误。关于数组声明,您建议的两个是模板参数无效。2个是指数组未在
main的范围内声明()
@Mysticssasuke请不要用更新的代码对原始问题进行编辑,这只会使新访问者对您的问题产生混淆。您可以发布更新的代码并为我设置一个链接。@Mysticssasuke但是现在我已经看到您在创建向量时犯了错误。您忘记了对类型的第二次关闭