分别读取文件,在最后一个读取部分后继续

时间:2014-08-28 08:26:39

标签: c++ file-io iteration

我一直在谷歌上搜索一段时间无济于事,我甚至不确定是否有这个名字。

我的用例是:我有一个包含应该独立处理的文本块的大文件。它们都是一个接一个地列在文件中,并用分隔符分隔。我想逐块读取该文件,并在读取块上执行一些操作,然后读取下一个块。像迭代文件,但不是一次读取所有内容。我有java代码通过某种实现可迭代接口的BlockGen类来实现,并在客户端代码需要时从先前读取的位置读取文件,但我不确定如何在C ++中正确实现它。

任何帮助表示赞赏。是的,这不是功课!

1 个答案:

答案 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;
};