10#ifndef model_TextFileParser_H_
11#define model_TextFileParser_H_
36 throw std::runtime_error(
"Unknown conversion from std::string "+key+
" to "+
typeid(T).name()+
".");
48 return std::atoi(str.c_str());
58 return std::atol(str.c_str());
66 static long long toScalar(
const std::string& str)
68 return std::atoll(str.c_str());
76 static unsigned long toScalar(
const std::string& str)
78 return std::stoul(str.c_str());
86 static unsigned long long toScalar(
const std::string& str)
88 return std::stoull(str.c_str());
98 return std::stof(str.c_str());
108 return std::stod(str.c_str());
117 static long double toScalar(
const std::string& str)
119 return std::stold(str.c_str());
127 template <
typename Scalar>
128 using EigenMapType=Eigen::Map<const Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>, 0, Eigen::Stride<Eigen::Dynamic,Eigen::Dynamic> >;
191 std::vector<std::pair<std::string,std::string>>
readKey(
const std::string&
key)
195 std::vector<std::pair<std::string,std::string>>
returnVector;
198 while (std::getline(*
this,
line))
241 throw std::runtime_error(
"File "+
fileName+
" does not cointain line with format "+
key+
"=...;");
259 throw std::runtime_error(
"File "+
fileName+
" cannot be opened.");
279 key.erase(std::remove_if(
key.begin(),
key.end(), [](
unsigned char x) { return std::isspace(x); }),
key.end());
298 template<
typename Scalar>
309 template<
typename Scalar>
313 std::set<Scalar>
tempS;
332 template<
typename Scalar>
342 std::vector<Scalar>
array;
345 while (std::getline(*
this,
line))
374 while(std::getline(*
this,
line))
409 throw std::runtime_error(
"File "+
fileName+
" does not cointain line with format "+
key+
"=...;");
427 template<
typename Scalar>
428 Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>
readMatrix(
const std::string&
key,
const size_t& rows,
const size_t& cols,
const bool&
verbose=
false)
432 if(
array.size()!=rows*cols)
434 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)+
").");
442 return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(
em);
446 template<
typename Scalar,
int rows,
int cols>
453 template<
typename Scalar>
454 Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>
readMatrixCols(
const std::string&
key,
const size_t& cols,
const bool&
verbose=
false)
458 if(
array.size()%cols!=0)
460 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)+
").");
465 const size_t rows(
array.size()/cols);
468 return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(
em);
472 template<
typename Scalar>
473 Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>
readMatrixRows(
const std::string&
key,
const size_t& rows,
const bool&
verbose=
false)
477 if(
array.size()%rows!=0)
479 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)+
").");
485 const size_t cols(
array.size()/rows);
488 return Eigen::Matrix<Scalar,Eigen::Dynamic,Eigen::Dynamic>(
em);
std::vector< Scalar > readArray(const std::string &key, const bool &verbose=false)
std::vector< std::pair< std::string, std::string > > readKey(const std::string &key)
TextFileParser(const std::string &_fileName)
Scalar readScalar(const std::string &key, const bool &verbose=false)
const std::string fileName
std::string readString(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
Eigen::Matrix< Scalar, rows, cols > readMatrix(const std::string &key, const bool &verbose=false)
static std::string removeSpaces(std::string key)
std::vector< std::pair< std::string, std::string > > readStringVector(const std::string &key)
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > readMatrixRows(const std::string &key, const size_t &rows, 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)
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > readMatrixCols(const std::string &key, const size_t &cols, const bool &verbose=false)
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)