#include "util.h" namespace Utils { array, 5> read_csv(const string& filename) { array, 5> array_vectors; vector vec_option; vector vec_opcision; ifstream file(filename); string line; char delimiter = ';'; getline(file, line); while (getline(file, line)) { stringstream stream(line); string option; string opcision; getline(stream, option, delimiter); string line_local = stream.str(); if (line_local.find("\"") != string::npos) { string str_delimiter = "\""; vector point = find_all(line_local, str_delimiter); size_t len = point.size(); if (len >= 2) { int index_start = point[len-2]; int index_end = point[len-1]; opcision = line_local.substr(index_start, index_end); index_end = opcision.find("\""); if (opcision.find("\"") != string::npos) { opcision.replace(index_end, opcision.length(), ""); } } else { opcision = "error"; } } else{ getline(stream, opcision, delimiter); } vec_option.push_back(option); vec_opcision.push_back(opcision); } array_vectors[0] = vec_option; array_vectors[1] = vec_opcision; return array_vectors; } void write_file(string path_name, string data) { ofstream fout(path_name, ios_base::out | ios_base::trunc); if (fout.is_open()) { fout << data; fout.close(); } } vector> read_csv_melody(const string& filename) { vector> vec_music; ifstream file(filename); string line; char delimiter = ';'; getline(file, line); while (getline(file, line)) { stringstream stream(line); string name; string code; getline(stream, name, delimiter); getline(stream, code, delimiter); tuple tuple_music(name, code); vec_music.push_back(tuple_music); } return vec_music; } string call(string cmd) { FILE *fp; int status; char path[PATH_MAX] = {0}; fp = popen(cmd.c_str(), "r"); if (fp == NULL) { exit(1); } while (fgets(path, PATH_MAX, fp) != NULL) { break; } status = pclose(fp); if (status == -1) { exit(1); } return path; } vector find_all(string &str_ntp, string substr) { size_t index = 0; vector sub_index; while ((index = str_ntp.find(substr, index)) != std::string::npos) { index += substr.length(); sub_index.push_back(index); } return sub_index; } void str_remove(std::string& source, std::string to_remove) { string::size_type n = to_remove.length(); for (string::size_type i = source.find(to_remove); i != string::npos; i = source.find(to_remove)) source.erase(i, n); } void str_replace_all(std::string& str_base, string str_find, string sReplacement) { size_t pos = 0, fpos; while ((fpos = str_base.find(str_find, pos)) != std::string::npos) { str_base.replace(fpos, str_find.size(), sReplacement); pos = fpos + sReplacement.size(); } } std::vector split(std::string text, char delim) { std::string line; std::vector vec; std::stringstream ss(text); while(std::getline(ss, line, delim)) { vec.push_back(line); } return vec; } }