2011-06-07 105 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>()));