#pragma once #pragma once #include #include #include #include #include #include namespace ReadCSV { using std::string; using std::vector; const string dir_root = "/users/dsc/code/TestProject/data_files"; template struct ReadCSV { vector> operator()(string file_name) { vector> res; string file_dir = dir_root + "/" + file_name; std::ifstream infile(file_dir, std::ios::in); string line; string word; using std::is_same_v; if (!infile.is_open()) { std::cout << "Error: opening file fail" << std::endl; std::exit(1); } while (std::getline(infile, line)) { std::istringstream sin; sin.str(line); vector line_data; while (std::getline(sin, word, ',')) { if constexpr (is_same_v) { line_data.push_back(std::stod(word)); } else if constexpr (is_same_v) { line_data.push_back(std::stoi(word)); } } res.push_back(line_data); } return res; } }; using ReadCSVF = ReadCSV; using ReadCSVI = ReadCSV; template struct FlowData { ReadCSVF readf; ReadCSVI readi; vector> data; int length; int cols; FlowData(string file_name = "D102-1#酸槽数据.csv") { if constexpr (is_same_v) { data = readf(file_name); } else if constexpr (is_same_v) { data = readi(file_name); } length = data.size(); cols = data[0].size(); } double operator()(int index, int col) { return data[index % length][col % cols]; } }; using DoubleData = FlowData; using IntData = FlowData; }; // namespace ReadCSV