从文件中读取单行到向量

时间:2016-07-08 23:30:10

标签: c++ vector fstream getline

我有一个以下格式的输入文件:

# 1 2 3 4 5 6 7
0 0 0 1
1 0 0 1
2 0 0 1
3 0 0 1
5 0 0 1
6 0 0 1

# 0 0 2 2 4 4 5
0 0 0 1
0 1 0 1
0 2 0 1
0 3 0 1

# 9 10 11 12 13 14 15 16 17 18
0 0 0 1
0 0 1 1
0 0 2 1
0 0 3 1

必须将每个以#开头的行读入其自己的向量中。这些向量之间的条目表示矩阵,也必须读入它们自己的矩阵。

因此,从上面的输入文件中,我最终想要的是:

knot1 = {1 2 3 4 5 6 7}
cp1= { {0,0,0,1} {1,0,0,1} {2,0,0,1} {3,0,0,1} {5,0,0,1} {6,0,0,1} } 

knot2 = {0 0 2 2 4 4 5}
cp2= {{...} {...} {...} {...} }

knot3 = {9 10 11 12 13 14 15 16 17 18}
cp3= {{...} {...} {...} {...} }

注意,每个矢量的大小不一定相同!矩阵也是如此。此外,#vector和矩阵的数量也会有所不同。

这是我到目前为止所做的:

    ifstream file;
    file.open(filename.c_str());

    if(file.fail()){
        cout << "Cannot open " << filename << endl;
    }

    int curr_line = 0;
    vector<int> knot_locations;    //stores the locations of the #vectors

    while(!file.eof()){       //loops over input file checking to see where the #vectors are
        curr_line++;
        string line;
        getline(file,line);
        if(line[0]=='#'){
            knot_locations.push_back(curr_line);
        }
    }

    for(int i=0; i < knot_locations.size(); i++){
        file.seekg(std::ios::beg);
        for(int i=0; i < knot_locations[i] - 1; ++i){     // this loop skips to the line that contains the #vectors.
            file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        }
    }

所以现在我就在线上了  包含矢量,我该怎么读 只是将SINGLE行转换为向量?!  我不知道如何把一个字符串变成  浮游物的向量。此外,因为我知道所有的 向量的位置,我可以阅读所有内容 在矩阵之间。但同样如此 问题。我不确定如何去实际 将这些读入一个数字数组/向量给定一行(字符串)

    file.close();

可能更好的方法。关于如何解决这个问题的任何想法?关键是能够将标有#的所有向量读入其自己的向量中。这些载体中可以有1-3个之间的任何位置。并且在这些向量中的每一个之间是未知行/列的矩阵,其也需要被读入它们自己的矩阵中。我上面的内容只是找到#marked vector。需要有关如何将字符串行读入数字数组或以不同的方式阅读建议的帮助。

谢谢。

0 个答案:

没有答案