add utils::trim() function to remove leading and trailing whitespace from string

This commit is contained in:
Axel Kohlmeyer 2020-07-30 23:39:37 -04:00
parent 4a28a708b9
commit 4b91ab0d23
No known key found for this signature in database
GPG Key ID: D9B44E93BF0C375A
3 changed files with 38 additions and 0 deletions

View File

@ -348,6 +348,19 @@ tagint utils::tnumeric(const char *file, int line, const char *str,
return ATOTAGINT(str);
}
/* ----------------------------------------------------------------------
Return string without leading or trailing whitespace
------------------------------------------------------------------------- */
std::string utils::trim(const std::string & line) {
int beg = re_match(line.c_str(),"\\S+");
int end = re_match(line.c_str(),"\\s+$");
if (beg < 0) beg = 0;
if (end < 0) end = line.size();
return line.substr(beg,end-beg);
}
/* ----------------------------------------------------------------------
Return string without trailing # comment
------------------------------------------------------------------------- */

View File

@ -143,6 +143,13 @@ namespace LAMMPS_NS {
tagint tnumeric(const char *file, int line, const char *str,
bool do_abort, LAMMPS *lmp);
/**
* \brief Trim leading and trailing whitespace. Like TRIM() in Fortran.
* \param line string that should be trimmed
* \return new string without whitespace (string)
*/
std::string trim(const std::string &line);
/**
* \brief Trim anything from '#' onward
* \param line string that should be trimmed

View File

@ -25,6 +25,24 @@ using ::testing::EndsWith;
using ::testing::Eq;
using ::testing::StrEq;
TEST(Utils, trim)
{
auto trimmed = utils::trim("\t some text");
ASSERT_THAT(trimmed, StrEq("some text"));
trimmed = utils::trim("some text \r\n");
ASSERT_THAT(trimmed, StrEq("some text"));
trimmed = utils::trim("\v some text \f");
ASSERT_THAT(trimmed, StrEq("some text"));
trimmed = utils::trim(" some\t text ");
ASSERT_THAT(trimmed, StrEq("some\t text"));
trimmed = utils::trim(" \t\n ");
ASSERT_THAT(trimmed, StrEq(""));
}
TEST(Utils, trim_comment)
{
auto trimmed = utils::trim_comment("some text # comment");