Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从特定位置c++;_C++_Fstream - Fatal编程技术网

C++ 如何从特定位置c++;

C++ 如何从特定位置c++;,c++,fstream,C++,Fstream,我正在使用fstream和getline函数读取文件。我想给出一个起始位置,例如,我的文件有13行,例如,我想从第7行开始读取。这是我的密码: #include<iostream> #include <stdlib.h> #include <string> #include <vector> #include<iterator> // for iterators #include<map> using namespace s

我正在使用
fstream
getline
函数读取文件。我想给出一个起始位置,例如,我的文件有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);//
}
#包括
#包括
#包括
#包括
#迭代器的include//
#包括
使用名称空间std;
int main()
{
弦线;
int start=7;
无符号长整型索引;

对于(intz=1;z,放弃一些行数,如:

#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;
}
#包括
#包括
int main(){
std::ifstream infle{“myfile.txt”};
std::字符串行;
int起始线=7;
//阅读并丢弃开头行
对于(int n=1;n<起始线;n+=1){
如果(!std::getline(infle,line)){
//错误或文件过早结束!请正确处理。
}
}
while(std::getline(infle,line)){
//用你关心的台词做点什么。
}
返回0;
}

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

要丢弃一些行,例如:

#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;
}
#包括
#包括
int main(){
std::ifstream infle{“myfile.txt”};
std::字符串行;
int起始线=7;
//阅读并丢弃开头行
对于(int n=1;n<起始线;n+=1){
如果(!std::getline(infle,line)){
//错误或文件过早结束!请正确处理。
}
}
while(std::getline(infle,line)){
//用你关心的台词做点什么。
}
返回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;
}
std::istream&seek_行(std::istream&is,const int n,std::ios_base::seekdir way=std::ios_base::beg)
{
is.seekg(0,方式);
int i=0;
字符c;
while(is.get(c)&&i
这就是您如何使用上述功能:

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;
}
intmain()
{
使用名称空间std;
ifstream是{“c:\\temp\\test.txt”};
如果(!is)
返回-1;
if(!seek_线(is,3))
返回-2;
字符串s;
getline(is,s);
cout“没有办法像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;
}
std::istream&seek_行(std::istream&is,const int n,std::ios_base::seekdir way=std::ios_base::beg)
{
is.seekg(0,方式);
int i=0;
字符c;
while(is.get(c)&&i
这就是您如何使用上述功能:

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;
}
intmain()
{
使用名称空间std;
ifstream是{“c:\\temp\\test.txt”};
如果(!is)
返回-1;
if(!seek_线(is,3))
返回-2;
字符串s;
getline(is,s);

如果你想从第7行开始做事情,可以读取并忽略for循环中的前6行吗?@Shawn不能这样做。任何其他解决方案都是“例如,我的文件有13行,我想从第7行开始读取”好的,除非每一行的长度都相同,否则读取并忽略前面的行是唯一的方法。请参阅答案示例代码。如果我理解正确,您不希望从第7行开始读取,而是从索引为7的行开始读取。因此,您必须读取行,从字符串中提取索引,并与您的起始行号进行比较。由于行的长度不同,我看不到其他方法。@到目前为止,您可以使用
f\u node.ignore(std::numeric\u limits::max(),“\n”忽略行的其余部分
在遇到换行符之前,将忽略最大值为
std::streamsize
的字符。如果要开始处理第7行,请读取并忽略for循环中的前6行或其他任何内容?@Shawn不能这样做。建议使用其他解决方案“例如,我的文件有13行,我想从第7行开始阅读"好的,除非每一行的长度都相同,否则读取并忽略前面的行是唯一的方法。请参阅答案示例代码。如果我理解正确,您不希望从第7行开始读取,而是从索引为7的行开始读取。因此,您必须读取行,从字符串中提取索引,并与您的起始行号进行比较。由于行的长度不同,我看不到其他方法。@到目前为止,您可以使用
f\u node.ignore(std::numeric\u limits::max(),“\n”忽略行的其余部分
在遇到换行符之前,它将忽略最大值为
std::streamsize
的字符。
while loop
如何从第7行开始读取?我无法理解it@RamiFar
for
循环读取并丢弃6行。因此
while
循环中读取的第一行是第七行。can请你帮我,我有4个线程,我想在循环分发系统中读取同一个文件。就像1个线程必须读取第1行,然后必须读取第4行,一次又一次跳过接下来的3行。如何
while loop
从第7行开始读取?我无法理解it@RamiFar
for
循环读取并丢弃6行。So在
循环中读取的第一行是第七行。你能帮我一下吗,我有4个线程,我想在循环分发系统中读取相同的文件。就像1个线程必须读取第1行,然后必须读取第4行,反复跳过接下来的3行。