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@RamiFarfor
循环读取并丢弃6行。因此while
循环中读取的第一行是第七行。can请你帮我,我有4个线程,我想在循环分发系统中读取同一个文件。就像1个线程必须读取第1行,然后必须读取第4行,一次又一次跳过接下来的3行。如何while loop
从第7行开始读取?我无法理解it@RamiFarfor
循环读取并丢弃6行。So在循环中读取的第一行是第七行。你能帮我一下吗,我有4个线程,我想在循环分发系统中读取相同的文件。就像1个线程必须读取第1行,然后必须读取第4行,反复跳过接下来的3行。