如何从特定位置开始读取文件C ++

时间:2018-10-18 06:02:59

标签: c++ fstream

我正在使用fstreamgetline函数读取文件。我想给一个开始的位置,例如我的文件有13行,例如,我想从第7行开始读取。这是我的代码:

#include<iostream>
#include <stdlib.h>
#include <string>
#include <vector>
#include<iterator> // for iterators
#include<map>
using namespace std;

int main() 
{
    string line;
    int start= 7;
    unsigned long int index;
    For( int z=1; z<=13; z++){
    if (f_node.is_open())
    {
        getline(f_node, line);
        if ((line.find("$EndNodes") != string::npos))
        {
            cout << "$EndNodes found file closed .... " << endl;
            f_node.close();
            return false;
        }

        // Point index.

        int i = 0;
        int j = line.find_first_of(" ", i);
        index = strtoul((line.substr(i, j)).c_str(), NULL, 0);//
}

} This is my file 我正在读取索引,我想从第7个索引开始。该怎么做?

2 个答案:

答案 0 :(得分:2)

要丢弃一些行,例如:

#include <fstream>
#include <string>

int main() {
  std::ifstream infile{"myfile.txt"};
  std::string line;
  int starting_line = 7;

  // Read and discard beginning lines
  for (int n = 1; n < starting_line; n += 1) {
    if (!std::getline(infile, line)) {
      // Error or premature end of file! Handle appropriately.
    }
  }

  while (std::getline(infile, line)) {
    // Do something with the lines you care about.
  }

  return 0;
}

除了实际的错误检查和处理等。

答案 1 :(得分:0)

“没有办法像seekg和tellg一样告诉代码起始位置吗?” 不。NL与其他任何字符一样,没有得到任何特殊待遇。

您只需扫描流,计算换行符

std::istream& seek_line(std::istream& is, const int n, std::ios_base::seekdir way = std::ios_base::beg)
{
  is.seekg(0, way);
  int i = 0;
  char c;
  while (is.get(c) && i < n)
    if (c == '\n')
      ++i;
  is.putback(c);
  return is;
}

这是您如何使用上述功能:

int main()
{
  using namespace std;

  ifstream is{ "c:\\temp\\test.txt" };
  if (!is)
    return -1;

  if (!seek_line(is, 3))
    return -2;

  string s;
  getline(is, s);
  cout << s << endl;

  return 0;
}