2011-06-07 104 views
0

我是C++的新手。我想读从STL文件,它看起来像从C++中的文本文件读取时忽略字符

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倍的数据。

现在我想只读取和存储二维数组形式的数值。 如果我完全可以忽略除顶点值之外的所有其他事物,那我会更好,因为我必须仅使用这些值。这个你能帮我吗。

+0

你有什么写到目前为止? – 2011-06-07 11:26:16

+0

如果格式与示例所示的一样严格,可以使用'input_stream >> ...'结构,也可以将结果存储在'std :: tr1 :: array '中。流内运算符将跳过所有空格,并且可以将文本部分转储为虚拟字符串。如下所示包装它也是一个好主意。 – 2011-06-07 12:23:15

回答

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>()));