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

时间:2014-04-13 12:24:34

标签: c++ matlab csv

我正在尝试编写C ++代码,以便将.csv文件中的值输入到C ++中的矩阵中。 .csv文件包含浮点值,大小通常> 100x100。 我无法得到否。 .csv文件中的行和列。它们来自Matlab代码,它生成大约10个.csv文件,每个文件都有不同的大小。因此,我需要能够自动获取.csv文件的大小(按行和列),以便可以在C ++代码中对2D数组进行delcared。

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;
 }

打印循环的输出只是空白。 .csv文件包含2x7。我怎样才能解决这个问题?是因为istringsteam()getLine()的多次使用。 请帮助。请注意,我仍然是C ++的初学者。

2 个答案:

答案 0 :(得分:0)

您忘记在第二个循环之前移回流的位置。在最后一个while()循环完成后,流到达终点。您现在必须清除错误状态并向后移动(您也可以关闭并重新打开文件):

file.clear();
file.seekg(0, std::ios_base::beg);

此外,您不能将运行时变量用作静态数组维度。如果支持,则编译器使用非标准扩展。您必须动态分配或使用向量:

std::vector<std::vector<float>> array(row, std::vector<float>(col))

答案 1 :(得分:0)

您可以计算任意行中逗号的数量,并计算&#34;计数+ 1&#34;将是.csv文件中的列数。

对于行数,你可以简单地写这样的东西 -

int rows=0;
ifstream file("xyz.csv");
string line;
while (getline(file, line))
rows++;

这里&#34;行&#34;将是.csv文件中的行数。

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