10#ifndef model_TextFileParser_H_
11#define model_TextFileParser_H_
37 throw std::runtime_error(
"Unknown conversion from std::string "+key+
" to "+
typeid(T).name()+
".");
49 return std::atoi(str.c_str());
59 return std::atol(str.c_str());
67 static long long toScalar(
const std::string& str)
69 return std::atoll(str.c_str());
77 static unsigned long toScalar(
const std::string& str)
79 return std::stoul(str.c_str());
87 static unsigned long long toScalar(
const std::string& str)
89 return std::stoull(str.c_str());
99 return std::stof(str.c_str());
109 return std::stod(str.c_str());
118 static long double toScalar(
const std::string& str)
120 return std::stold(str.c_str());
128 template <
typename Scalar>
129 using EigenMapType=Eigen::Map<const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>, 0, Eigen::Stride<Eigen::Dynamic,Eigen::Dynamic> >;
192 std::vector<std::pair<std::string,std::string>>
readKey(
const std::string&
key)
196 std::vector<std::pair<std::string,std::string>>
returnVector;
199 while (std::getline(*
this,
line))
242 throw std::runtime_error(
"File "+
fileName+
" does not cointain line with format "+
key+
"=...;");
260 throw std::runtime_error(
"File "+
fileName+
" cannot be opened.");
280 key.erase(std::remove_if(
key.begin(),
key.end(), [](
unsigned char x) { return std::isspace(x); }),
key.end());
299 template<
typename Scalar>
310 template<
typename Scalar>
314 std::set<Scalar>
tempS;
333 template<
typename Scalar>
343 std::vector<Scalar>
array;
346 while (std::getline(*
this,
line))
375 while(std::getline(*
this,
line))
410 throw std::runtime_error(
"File "+
fileName+
" does not cointain line with format "+
key+
"=...;");
428 template<
typename Scalar>
429 Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>
readMatrix(
const std::string&
key,
const size_t& rows,
const size_t& cols,
const bool&
verbose=
false)
433 if(
array.size()!=rows*cols)
435 throw std::runtime_error(
"Error in reading matrix "+
key+
": array.size="+std::to_string(
array.size())+
" is not equal to rows x cols ("+std::to_string(rows)+
"x"+std::to_string(cols)+
").");
443 return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(
em);
447 template<
typename Scalar,
int rows,
int cols>
454 template<
typename Scalar>
455 Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>
readMatrixCols(
const std::string&
key,
const size_t& cols,
const bool&
verbose=
false)
459 if(
array.size()%cols!=0)
461 throw std::runtime_error(
"Error in reading matrix "+
key+
": array.size="+std::to_string(
array.size())+
" is not a multiple of cols ("+std::to_string(cols)+
").");
466 const size_t rows(
array.size()/cols);
469 return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(
em);
473 template<
typename Scalar>
474 Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>
readMatrixRows(
const std::string&
key,
const size_t& rows,
const bool&
verbose=
false)
478 if(
array.size()%rows!=0)
480 throw std::runtime_error(
"Error in reading matrix "+
key+
": array.size="+std::to_string(
array.size())+
" is not a multiple of rows ("+std::to_string(rows)+
").");
486 const size_t cols(
array.size()/rows);
489 return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(
em);
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > readMatrixRows(const std::string &key, const size_t &rows, const bool &verbose=false)
std::vector< Scalar > readArray(const std::string &key, const bool &verbose=false)
Eigen::Matrix< Scalar, rows, cols > readMatrix(const std::string &key, const bool &verbose=false)
Eigen::Map< const Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic >, 0, Eigen::Stride< Eigen::Dynamic, Eigen::Dynamic > > EigenMapType
std::string readString(const std::string &key, const bool &verbose=false)
std::set< Scalar > readSet(const std::string &key, const bool &verbose=false)
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > readMatrix(const std::string &key, const size_t &rows, const size_t &cols, const bool &verbose=false)
TextFileParser(const std::string &_fileName)
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > readMatrixCols(const std::string &key, const size_t &cols, const bool &verbose=false)
Scalar readScalar(const std::string &key, const bool &verbose=false)
std::vector< std::pair< std::string, std::string > > readStringVector(const std::string &key)
const std::string fileName
std::vector< std::pair< std::string, std::string > > readKey(const std::string &key)
static std::string removeSpaces(std::string key)
static std::string cyanColor
static std::string defaultColor
static double toScalar(const std::string &str)
static float toScalar(const std::string &str)
static int toScalar(const std::string &str)
static long toScalar(const std::string &str)
static long double toScalar(const std::string &str)
static long long toScalar(const std::string &str)
static unsigned long toScalar(const std::string &str)
static unsigned long long toScalar(const std::string &str)
static T toScalar(const std::string &key)