如果有这样的文本文件:
3 size of group
10 individual therapy time(min)
15 group therapy time(min)
25 new client probability percentage
500 individual therapy cost
300 group therapy cost
Run Code Online (Sandbox Code Playgroud)
有没有办法只读取文本行的第一个整数并跳转到其他行?
我尝试过的:
settingsFile >> groupSize >> trash >> trash >> trash;
settingsFile >> indTime >> trash >> trash >> trash;
settingsFile >> newClientProb >> trash >> trash >> trash >> trash;
settingsFile >> indTherapyCost >> trash >> trash >> trash;
settingsFile >> groupTherapyCost >> trash >> trash >> trash;
Run Code Online (Sandbox Code Playgroud)
在我看来,这不是一个阅读文本文件的好方法,因为如果我trash从文本文件中删除一个字符串,整个阅读将失败.
您可以使用以下方式忽略行的其余部分std::getline:
settingsFile >> groupSize;
std::getline(settingsFile, trash);
settingsFile >> indTime;
std::getline(settingsFile, trash);
settingsFile >> newClientProb;
std::getline(settingsFile, trash);
settingsFile >> indTherapyCost;
std::getline(settingsFile, trash);
settingsFile >> groupTherapyCost;
std::getline(settingsFile, trash);
Run Code Online (Sandbox Code Playgroud)
另一种方法是逐行读取文件到临时字符串变量,然后通过利用解析该字符串开头的整数string_stream,但这有点乏味.
如果C++ 11可用,那么第二步可以很容易地完成std::stoi,最后得到这样的代码(这次是在循环中):
for (std::string line; std::getline(settingsFile, line); ) {
int value = std::stoi(line);
...
}
Run Code Online (Sandbox Code Playgroud)
或者引入一个新功能readIntLine:
template< class CharT, class Traits>
int readIntLine(std::basic_istream<CharT,Traits>& input) {
std::basic_string<CharT,Traits> line;
std::getline(settingsFile, line);
return std::stoi(line);
}
Run Code Online (Sandbox Code Playgroud)
然后,它可以像这样使用:
groupSize = readIntLine(settingsFile);
indTime = readIntLine(settingsFile);
newClientProb = readIntLine(settingsFile);
indTherapyCost = readIntLine(settingsFile);
groupTherapyCost = readIntLine(settingsFile);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |