Как прочитать числовое значение из файла данных в C ++ с комментариями (например, Fortran) - PullRequest
0 голосов
/ 21 ноября 2019

Я хочу прочитать значение некоторых параметров из файла данных. Но файл данных содержит комментарии после каждой строки, начинающейся с! (это могут быть символы типа #, //). Как сделать это с помощью программы, подобной следующей,


#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

Ответы [ 2 ]

3 голосов
/ 21 ноября 2019

Вы можете отказаться от остальных строк после прочтения чисел, которые появляются в этих строках.

std::string ignored;
inFile >> V1 >> p >> q;
std::getline(inFile, ignored);
inFile >> r;
std::getline(inFile, ignored);
inFile >> s;
1 голос
/ 21 ноября 2019

Я предпочитаю кусочки, а не мелкие кусочки:

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

Формат данных плохо объяснен, поэтому это общее решение.

С точной спецификацией: что в каждой строке, этоможно сделать по-другому.

...