我正在读取有多个列的文件,每行有不同的列数,它们是不同长度的数值,我有固定行数(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];
}
}
}
答案 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::vector
,std::istringstream
和std::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';
}