如何从c ++中的数据文件中读取带注释的数字值(如Fortran)

问题描述 投票:0回答:2

我想从数据文件中读取某些参数的值。但是数据文件在每行以!开头之后包含注释。 (可能是#,//等符号)。如何使用类似以下程序的程序做到这一点,


#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
c++ ifstream
2个回答
3
投票

读取这些行上显示的数字后,您可以丢弃其余行。

std::string ignored;
inFile >> V1 >> p >> q;
std::getline(inFile, ignored);
inFile >> r;
std::getline(inFile, ignored);
inFile >> s;

0
投票

我更喜欢切小块的东西:

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);
}

数据格式解释得不好,所以这是一个常规解决方案。

具有精确的规范:每行中的内容,可以用不同的方式完成。

© www.soinside.com 2019 - 2024. All rights reserved.