6

想知道是否有人可以帮我构建一个程序,该程序可以从 csv 文件中读取大小未知的浮点大数据块。我已经在 MATLAB 中编写了这个,但想编译和分发它,所以转向 c++。

我只是在学习并尝试阅读本文开始

7,5,1989
2,4,2312

从文本文件。

到目前为止的代码。

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <stdlib.h>

const int ROWS = 2;
const int COLS = 3;
const int BUFFSIZE = 80;

int main() {
  int array[ROWS][COLS];
  char buff[BUFFSIZE];
  std::ifstream file( "textread.csv" );
  std::string line; 
  int col = 0;
  int row = 0;
  while( std::getline( file, line ) )
  {
    std::istringstream iss( line );
    std::string result;
    while( std::getline( iss, result, ',' ) )
      {
        array[row][col] = atoi( result.c_str() );
        std::cout << result << std::endl;
        std::cout << "column " << col << std::endl;
        std::cout << "row " << row << std::endl;
        col = col+1;
      }
    row = row+1;
    col = 0;
  }
  return 0;
}

我使用的 matlab 代码是 >>

fid = fopen(twoDM,'r');

s = textscan(fid,'%s','Delimiter','\n');
s = s{1};
s_e3t = s(strncmp('E3T',s,3));
s_e4q = s(strncmp('E4Q',s,3));
s_nd = s(strncmp('ND',s,2));

[~,cell_num_t,node1_t,node2_t,node3_t,mat] = strread([s_e3t{:}],'%s %u %u %u %u %u');
node4_t = node1_t;
e3t = [node1_t,node2_t,node3_t,node4_t];
[~,cell_num_q,node1_q,node2_q,node3_q,node_4_q,~] = strread([s_e4q{:}],'%s %u %u %u %u %u %u');
e4q = [node1_q,node2_q,node3_q,node_4_q];
[~,~,node_X,node_Y,~] = strread([s_nd{:}],'%s %u %f %f %f');

cell_id = [cell_num_t;cell_num_q];
[~,i] = sort(cell_id,1,'ascend');

cell_node = [e3t;e4q];
cell_node = cell_node(i,:);

感谢 totrace 修复了我在我的 c++ 代码中遇到的初始编译错误,但我正在寻找持续的提示帮助,如果有人可以帮我一把,那就太棒了。

道具,亚历克斯·拜亚斯

4

2 回答 2

2

更改此行: array[row][col] = atoi( result.c_str );

至: array[row][col] = atoi( result.c_str() );

c_str() 是一个方法,所以你需要括号来调用它。请参阅http://en.cppreference.com/w/cpp/string/basic_string/c_str

于 2013-09-13T02:45:51.373 回答
0

这是一个很老的问题,但这是我要做的(恕我直言,它看起来更干净),也许其他人会觉得它有用:

#include <iostream>

const int ROWS = 2;
const int COLS = 3;

int main() {
    int array[ROWS][COLS];

    FILE *file = fopen("textread.csv", "r");
    int value;
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            fscanf(file, "%d,", &array[i][j]);
        }
    }
    return 0;
}

如果您只想确保所有这些数字现在都在数组中:

for (int i = 0; i < ROWS; i++) {
    for (int j = 0; j < COLS; j++) {
        printf("%d ", array[i][j]);
    }
    printf("\n");
}

程序将输出:

7 5 1989 
2 4 2312 
于 2017-07-20T23:15:10.127 回答