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

标签 c++ matlab csv

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

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++ 的初学者。

最佳答案

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

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

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

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

关于c++ - 在 C++ 中获取 .csv 文件的列数和行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23042707/

相关文章:

c++ - 在 O1 或 O3 上调用 grind 进行性能分析?

vba - 抑制 "Save As"提示

csv - 将Hive查询导出为CSV

c++ - 将二维数组传输到 csv 文件?

c++ - 为了模拟对象,我们是否应该将所有成员函数声明为虚拟(C++)?

c++ - PJSIP从当前通话中获取编解码器

arrays - 在matlab中将字符串转换为数字数组

matlab - Opencv 中的直方图

matlab - 数字图像处理中的局部最小值和最大值是什么意思?

python - Pandas 在阅读 csv 时无法识别日期