56 lines
860 B
C++
56 lines
860 B
C++
#ifndef DATA_SPLITTER_H
|
|
#define DATA_SPLITTER_H
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
/**
|
|
* split an input-file into various tokens
|
|
*/
|
|
class Splitter {
|
|
|
|
std::string str;
|
|
char sep = ';';
|
|
std::vector<std::string> split;
|
|
|
|
public:
|
|
|
|
/** ctor */
|
|
Splitter(const std::string& str, const char sep = ';') : str(str), sep(sep) {
|
|
build();
|
|
}
|
|
|
|
bool has(const int idx) const {return split.size() > idx;}
|
|
|
|
const std::string& get(const int idx) const {return split.at(idx);}
|
|
|
|
const float getFloat(const int idx) const {return std::stof(get(idx));}
|
|
|
|
size_t size() const {return split.size();}
|
|
|
|
bool empty() const {return split.empty();}
|
|
|
|
private:
|
|
|
|
void build() {
|
|
|
|
std::string cur;
|
|
|
|
for (char c : str) {
|
|
if (c == sep) {
|
|
split.push_back(cur);
|
|
cur = "";
|
|
} else {
|
|
cur += c;
|
|
}
|
|
}
|
|
|
|
split.push_back(cur);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
#endif // DATA_SPLITTER_H
|