格式化读取文件数据C ++

时间:2011-12-20 08:10:39

标签: c++ stl

我在文件中有以下格式的数据 ( p1, p2 ) (p3, p4 ) ( p5, p6 )

我如何在C ++中阅读本文,我可以阅读一行并解析它,但我正在寻找一些C++ stl方式来阅读这种格式。

1 个答案:

答案 0 :(得分:2)

这取决于您要在程序中表示数据的格式。一种方法是使用自定义流提取运算符struct

struct Data {
    int val1; // just assuming int for the data-type
    int val2;
};

std::istream & operator>>(std::istream& input, Data & obj) {
    input.ignore(2, '('); // skip all including opening brace
    input >> obj.val1;
    input.ignore(2, ','); // skip comma
    input >> obj.val2;
    input.ignore(2, ')'); // skip closing brace
    return input;
}

正如@Seth Carnegie在answer to a similar question中演示的那样,您也可以使用INT_MAX来确保自己跳得足够多 - 但是,使用std::numeric_limits<std::streamsize>::max()会更好。

然后你可以像这样阅读文件的所有内容:

std::vector<Data> all_data;
std::ifstream input_file("your_file.txt");
std::copy(std::istream_iterator<Data>(input_file), 
          std::istream_iterator<Data>(),
          std::back_inserter(all_data));

Here是一个完整的工作示例。