【发布时间】:2014-11-12 20:42:43
【问题描述】:
在使用 ifstream 从纯文本文件中读取数据时,确定何时到达数据行末尾的最简单(最简单)的方法是什么?基本上我需要根据数据在文本文件中的位置(按行号测量)对数据做不同的事情。
如果我有一个包含以下内容的文本文件:
12 54 873 9 87 23
34 25 93 10 94 5 8
第一行我可能想要存储,但是第二行我需要在存储之前修改,或者丢弃,或者做一些其他的操作。
直接文件读取看起来像这样
while (inFile >> temp)
//store temp;
编辑:
我还没有测试过,这就是我想出的。我对更复杂的字符串类函数做的不多,所以我的语法可能不正确,但看起来我走在正确的轨道上吗?
// include the necessary libraries
string line, delim = ' ';
ifstream inFile;
int temp, lineNum = 1;
size_t pos = 0;
file.open('/path/to/file');
while(getline(file, line)){
while ((pos = line.find(delim)) != npos) {
temp = file.substr(0, file.find(delim);
line.erase(0, pos + delim.length());
// depending on the value of lineNum
// work with temp
}
lineNum++;
}
一个简单的问题是,当我将它直接分配给 temp 时,它是否可以转换为 int(我需要它),或者我是否需要在使用它之前将其转换为 int。
【问题讨论】:
-
getline 成字符串'line',把'line' 放入字符串流并处理
-
file.substr()应该是line.substr(),file.find()应该是line.find()。但是你已经有了pos,所以第二个find()是多余的。为了使解析更容易,您应该使用istringstream来解析每一行。然后,您可以使用带有分隔符的getline()从流中读取分隔的子字符串,或者在分隔符为空白时使用流的>>运算符。我编辑了我的答案以表明这一点。