c++语言循环读写文件夹,在C++中逐行读取文件

file.txt的内容包括:

5 3

6 4

7 1

10 5

11 6

12 3

12 4

其中,5 3是一个坐标对。如何在C++中逐行处理此数据?

我可以得到第一行,但如何得到文件的下一行?

ifstream myfile;

myfile.open ("text.txt");

首先,制作一个ifstream:

#include

std::ifstream infile("thefile.txt");

两种标准方法是:

假设每行由两个数字组成,并逐个标记地读取:

int a, b;

while (infile >> a >> b)

{

// process pair (a,b)

}

基于行的分析,使用字符串流:

#include

#include

std::string line;

while (std::getline(infile, line))

{

std::istringstream iss(line);

int a, b;

if (!(iss >> a >> b)) { break; } // error

// process pair (a,b)

}

您不应该混合(1)和(2),因为基于令牌的解析不会吞掉新行,因此,如果在基于令牌的提取使您到达行的末尾之后使用getline(),则可能会以虚假的空行结束。

解决方案1是否将逗号作为令牌?

@爱德华德卡拉克:我不明白"象征性的逗号"是什么意思。逗号不代表整数。

OP用一个空格来分隔两个整数。我想知道如果操作a用作逗号a分隔符,while(infile>>a>>b)是否有效,因为这是我自己程序中的场景。

@爱德华:啊,所以当你说"令牌"时,你的意思是"分隔符"。正确的。用逗号,你会说:int a, b; char c; while ((infile >> a >> c >> b) && (c == ','))。

@Kerreksb:只有逗号被空格包围,即"1,2",这才有效。如果行包含"1,2",那么代码将尝试将"1,2"转换为整数(存储在A中),而C和B将在下一行获得标记/分隔符。除了空白分隔符之外,您还需要使用std::getline()并解析该行。

@马克:你确定吗?

@凯瑞克:嗯。我错了。我不知道它能做到。我可能有自己的代码需要重写。

关于while(getline(f, line)) { }结构的解释和错误处理,请看这篇(我的)文章:gehrcke.de/2011/06/…(我认为我不需要良心不好地在这里发布这个,它甚至稍微提前了这个答案的日期)。

农民任务指挥部

@伽罗瓦:茅草屋顶:—)

好好享受你的冷饮吧

跳过""注释行的最佳方法是使用第一种或第二种方法?谢谢。

@Elgnoh:在第一种方法中不能这样做,它假定您正在解析令牌,并且不知道"行"是什么。第二种方法很简单,只需检查行字符串的第一个字符(可能跳过空白)。

@Kerreksb:我理解,在第一种方

你可能感兴趣的:(c++语言循环读写文件夹)