我想从数据文件中读取某些参数的值。但是数据文件在每行以!开头之后包含注释。 (可能是#,//等符号)。如何使用类似以下程序的程序做到这一点,
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream inFile;
inFile.open("input.data");
int V1;
double p,q,r,s;
inFile>>V1>>p>>q>>r>>s;
return (EXIT_SUCCESS);
}
并且数据文件是这个input.data
5000 0.25 64 !comments here
0.3 !comments here
78.025 !comments here
或
5000 0.25 64 !comments here
0.3 !comments here
78.025 !comments here
读取这些行上显示的数字后,您可以丢弃其余行。
std::string ignored;
inFile >> V1 >> p >> q;
std::getline(inFile, ignored);
inFile >> r;
std::getline(inFile, ignored);
inFile >> s;
我更喜欢切小块的东西:
using LineData = std::vector<double>;
using Data = std::vector<LineData>;
LineData load_line_data(std::istream& input)
{
LineData result;
std::copy(std::istream_iterator<double>{}, {}, std::back_inserter(result));
return result;
}
Data load_data(std::istream& input)
{
Data result;
std::string line;
while (std::getline(input, line)) {
std::istring_stream line_stream{ line };
result.push_back(load_line_data(line_stream));
}
return result;
}
Data load_data(const std::string& fileName)
{
std::ifstream f{fileName};
return load_data(f);
}
数据格式解释得不好,所以这是一个常规解决方案。
具有精确的规范:每行中的内容,可以用不同的方式完成。