将文件列读入数组

时间:2012-05-09 18:06:10

标签: c++ arrays

我正在读取有多个列的文件,每行有不同的列数,它们是不同长度的数值,我有固定行数(20)如何将每列放入数组? / p>

假设我有以下数据文件(每列之间有标签)

20   30      10
22   10       9       3     40 
60    4
30    200   90
33    320    1        22    4

如何将这些列放入不同的数组中,第1列转到一个列,第2列转到另一列。只有第2列有超过2位数值,其余列有1或2位数值,有些列也为空,除了1,2和3

int main()
{     
    ifstream infile;
    infile.open("Ewa.dat");

    int c1[20], c2[20], ... c6[20];

    while(!infile.eof()) { 
        //what will be the code here?
        infile >>lines;
        for(int i = 1; i<=lines; i++) {
            infile >> c1[i];     
            infile >> c2[i];
             .
             .
            infile >> c6 [20]; 
        }
    }
}

2 个答案:

答案 0 :(得分:1)

这是主要想法:

使用2D阵列而不是许多1D阵列 使用std::string阅读每一行 然后使用:istringstream is(str);将帮助解析字符串并将其放入数组中:

while(...) {
    ....
    getline(infile, str);
    istringstream is(str);
    j=0;
    while(is)
        {
            is >> c[i][j];
        }
    i++;
    ....
    }

我会把剩下的留给你。

答案 1 :(得分:1)

利用某些C ++库类可能更容易,例如std::vectorstd::istringstreamstd::string

#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

int main() {
  std::vector<std::vector<int> > allData;

  std::ifstream fin("data.dat");
  std::string line;
  while (std::getline(fin, line)) {      // for each line
    std::vector<int> lineData;           // create a new row
    int val;
    std::istringstream lineStream(line); 
    while (lineStream >> val) {          // for each value in line
      lineData.push_back(val);           // add to the current row
    }
    allData.push_back(lineData);         // add row to allData
  }

  std::cout << "row 0 contains " << allData[0].size() << " columns\n";
  std::cout << "row 0, column 1 is " << allData[0][1] << '\n';
}