在C ++中读取文件时跳过文本

时间:2011-09-24 20:14:54

标签: c++ file

我是初级C ++学生,我正在处理来自外部文件的数据。我试图从我需要跳过的大量数据中散列某些信息。我知道我要找的是什么文字。我如何编写一个跳过文件/一行中一定数量字符的函数,或者在iostream或类似的东西中是否已存在这样的东西?谷歌到目前为止让我失望了。

2 个答案:

答案 0 :(得分:3)

一般跳过:seekg

关于真正的问题:

您似乎希望将图案与大量(半?)文本进行匹配。由于模式足够长,你可以通过跳过输入延伸来获得,它真的似乎你正在尝试全面发明优化的字符串搜索。

已经完成:

实现存在于野外(我假设Boost字符串算法应该拥有它......但也许它太通用了。不管怎样我都看看。)

PS:提升精神

此解析器当前正在审查实现qi::seek[]指令的增强功能:

这允许在Spirit语法中快速跳过。因此,如果您有一个完整解析器(甚至可能是扫描器/解析器)的情况,Spirit Qi可能真的是您的性能匹配。

请务必:

    如果可以的话,
  • 避免缓冲输入迭代器适配器(取决于语法)
  • imbue“C”语言环境,如果可以的话
  • 对输入streambuf的迭代器进行操作,而不是输入流迭代器

答案 1 :(得分:1)

#include <iostream>
#include <string>
using std::ifstream;
using std::string;
using std::getline;

ifstream ifs(filename);
if ( ! ifs ) {
    /* ERROR CODE IN HERE */
}

string line;
while ( getline(ifs, line) )
{
    // line now contains one line from the input file
    if ( /* want to skip */ ) {
        continue;
    }

    /* Do something with the line */
}

编辑:一些boost字符串谓词(starts_with,ends_with)可能对while循环中的条件有用。例如,如果您只想处理以“FOO”开头的行,您可以编写

#include <boost/algorithm/string/predicate.hpp>
using boost::starts_with;

while ( getline(ifs,line) )
{
    if ( starts_with(line, "FOO") ) {
        /* DO SOMETHING */
    }
}

http://www.boost.org/doc/libs/1_41_0/doc/html/string_algo.html