在C ++中从文本文件中读取时忽略字符

时间:2011-06-07 11:19:52

标签: c++ arrays

我是c ++的新手。我想从STL文件中读取数据,看起来像

facet normal -0 -0 -1

outer loop

vertex 2.49979 1.14163 0.905974

vertex 2.49979 1.01687 0.905974

vertex 2.22582 1.68468 0.905974

endloop

endfacet 0

并且同样的事情会继续使用100次不同的值。

现在我想只读取和存储2D数组形式的数值。 如果我可以完全忽略除顶点值之外的所有其他事情,那将更好,因为我必须只使用那些值。请帮帮我。

1 个答案:

答案 0 :(得分:2)

您可以将矩阵包装在类中并为其创建自定义提取运算符:

struct MyMatrix {
    double values[3][3];
};

std::istream & operator >>(std::istream & stream, MyMatrix & value) {
    std::string dummy;

    std::getline(stream, dummy);
    std::getline(stream, dummy);
    std::getline(stream, dummy);
    std::getline(stream, dummy); // discard first four lines
    for(int i = 0; i < 3; i++)
       stream >> dummy >> value.values[i][0] >> value.values[i][1] 
              >> value.values[i][2];

    std::getline(stream, dummy);
    std::getline(stream, dummy);
    std::getline(stream, dummy);
    std::getline(stream, dummy); // discard last four lines

    return stream;
}

使用此运算符,您可以像这样读取整个文件:

std::ifstream file("data.txt");
std::vector<MyMatrix> data(std::istream_iterator<MyMatrix>(file),
                           (std::istream_iterator<MyMatrix>()));