7#include <range/v3/view/map.hpp>
12namespace rng = ranges;
17 auto split_string_view(std::string_view str, std::string_view del) -> std::vector<std::string_view>
19 auto splits = std::vector<std::string_view>{};
21 for (
auto sub_begin = str.find_first_not_of(del); sub_begin != std::string_view::npos;
22 sub_begin = str.find_first_not_of(del, sub_begin))
24 auto sub_end = str.find_first_of(del, sub_begin);
25 sub_end = (sub_end == std::string_view::npos) ? str.size() : sub_end;
26 auto sub_str = str.substr(sub_begin, sub_end - sub_begin);
27 splits.push_back(sub_str);
33 auto parse_parameter(std::string_view line_string) -> std::optional<ParResultEntry>
35 auto splits_view = split_string_view(line_string,
" ");
36 auto result = ParResultEntry{};
38 constexpr auto max_size = 5;
39 constexpr auto min_size = 3;
40 if (splits_view.size() >= min_size)
42 result.par_num = std::stoi(std::string{ splits_view.front() });
43 result.value = std::stof(std::string{ splits_view[1] });
44 result.sigma = std::stof(std::string{ splits_view[2] });
51 if (splits_view.size() == max_size)
53 result.value_diff = std::stof(std::string{ splits_view[3] });
54 result.error = std::stof(std::string{ splits_view.back() });
56 else if (splits_view.size() != min_size)
72 auto ifile = std::ifstream(
filename_, std::ios_base::in);
73 auto buffer = std::string{};
76 std::getline(ifile, buffer);
77 while (std::getline(ifile, buffer))
79 auto result = parse_parameter(buffer);
80 if (result.has_value())
std::unordered_map< int, ParResultEntry > par_results_