我一直在谷歌上搜索一段时间无济于事,我甚至不确定是否有这个名字。
我的用例是:我有一个包含应该独立处理的文本块的大文件。它们都是一个接一个地列在文件中,并用分隔符分隔。我想逐块读取该文件,并在读取块上执行一些操作,然后读取下一个块。像迭代文件,但不是一次读取所有内容。我有java代码通过某种实现可迭代接口的BlockGen类来实现,并在客户端代码需要时从先前读取的位置读取文件,但我不确定如何在C ++中正确实现它。
任何帮助表示赞赏。是的,这不是功课!
答案 0 :(得分:1)
对于固定块大小,您可以使用ifstream::read
在您的情况下,推出自己的BlockGen
:
给出Block
的定义,例如一个std::vector<std::string>
和一个类(虽然适用于复制构造函数等)
class BlockGen
{
public:
//boilerplate constructors, taking delimiter between blocks
// opening input etc, etc
Block getNextBlock()
{
Block block;
std::string line;
while( std::getline(input, line) && line!=delimiter)
{
block.push_back(line);
}
return block;
}
private:
std::ifstream input;
std::string delimiter;
};