From 78eb2051d06b6738948d647646a6fde62698bc52 Mon Sep 17 00:00:00 2001 From: peters <peters@irmb.tu-bs.de> Date: Tue, 29 Jun 2021 13:57:01 +0200 Subject: [PATCH] Add test to UbFileInputASCII and update the string formating. --- .../basics/utilities/UbFileInputASCII.cpp | 39 ++++++++++--------- .../basics/utilities/UbFileInputASCIITest.cfg | 1 + .../basics/utilities/UbFileInputASCIITest.cpp | 18 +++++++++ 3 files changed, 40 insertions(+), 18 deletions(-) create mode 100644 src/basics/basics/utilities/UbFileInputASCIITest.cfg create mode 100644 src/basics/basics/utilities/UbFileInputASCIITest.cpp diff --git a/src/basics/basics/utilities/UbFileInputASCII.cpp b/src/basics/basics/utilities/UbFileInputASCII.cpp index 12ce32ab0..cefa577d2 100644 --- a/src/basics/basics/utilities/UbFileInputASCII.cpp +++ b/src/basics/basics/utilities/UbFileInputASCII.cpp @@ -1,5 +1,6 @@ #include <basics/utilities/UbFileInputASCII.h> #include <cstring> +#include <algorithm> using namespace std; @@ -138,7 +139,7 @@ bool UbFileInputASCII::containsString(const string &var) } /*==========================================================*/ int UbFileInputASCII::readIntegerAfterString(const string &var) -// last change [10.3.2004] at [9:46] +// last change [29.6.2021] at [13:52] // suchts in einer Datei nach varname und gibt den dahinter stehenden int-Wert zurueck // z.B. timesteps 9 { @@ -155,14 +156,16 @@ int UbFileInputASCII::readIntegerAfterString(const string &var) " wasn't found in " + this->filename)); } while (strstr(line, var.c_str()) != line); // Ende Schleife, wenn varname ganz in zeile vorkommt - strcpy(line, (line + strlen(var.c_str()))); // zeile um "varname" kuerzen - while ((line[0] == ' ') || (line[0] == '\t')) - strcpy(line, (line + 1)); // Whitespaces entfernen + std::string temp {line}; + temp = temp.substr(var.size()); // zeile um "varname" kuerzen + + temp.erase(std::remove(temp.begin(), temp.end(), ' '), temp.end()); // remove whitespace + temp.erase(std::remove(temp.begin(), temp.end(), '\t'), temp.end()); // remove tabs - return (atoi(line)); // Umwandlung in int + return std::stoi(temp); } /*==========================================================*/ -// last change [10.3.2004] at [9:46] +// last change [29.6.2021] at [13:52] // sucht in einer Datei nach varname und gibt den dahinter stehenden int-Wert zurueck // z.B. nue 9.5 double UbFileInputASCII::readDoubleAfterString(const string &var) @@ -181,14 +184,16 @@ double UbFileInputASCII::readDoubleAfterString(const string &var) } while (/*!strncmp(varname,line,sizeof(varname))==0*/ strstr(line, var.c_str()) != line); // Ende Schleife, wenn varname ganz in zeile vorkommt - strcpy(line, (line + strlen(var.c_str()))); // zeile um "varname" kuerzen - while ((line[0] == ' ') || (line[0] == '\t')) - strcpy(line, (line + 1)); // Whitespaces entfernen + std::string temp {line}; + temp = temp.substr(var.size()); // zeile um "varname" kuerzen + + temp.erase(std::remove(temp.begin(), temp.end(), ' '), temp.end()); // remove whitespace + temp.erase(std::remove(temp.begin(), temp.end(), '\t'), temp.end()); // remove tabs - return (atof(line)); // Umwandlung in double + return std::stod(temp); } /*==========================================================*/ -// [9.9.2002] +// last change [29.6.2021] at [13:52] // liefert string-Wert der hinter dem uebergebenen char feld in der datei infile steht // zudem wird der wert in die uebergebene variable value uebertragen (falls man das ergebniss als char benoetig) string UbFileInputASCII::readStringAfterString(const string &var) //,char *value) @@ -207,15 +212,13 @@ string UbFileInputASCII::readStringAfterString(const string &var) //,char *value " wasn't found in " + this->filename)); } while (strstr(line, var.c_str()) != line); // Ende Schleife, wenn varname ganz in zeile vorkommt - strcpy(line, (line + strlen(var.c_str()))); // zeile um "varname" kuerzen - while ((line[0] == ' ') || (line[0] == '\t')) - strcpy(line, (line + 1)); // Whitespaces entfernen + std::string temp {line}; + temp = temp.substr(var.size()); // zeile um "varname" kuerzen - char *p; - p = strtok(line, " "); // schneidet alles "ab und inklusive space " nach namen ab - p = strtok(line, "\t"); // schneidet alles "ab und inklusive tab " nach namen ab + temp.erase(std::remove(temp.begin(), temp.end(), ' '), temp.end()); // remove whitespace + temp.erase(std::remove(temp.begin(), temp.end(), '\t'), temp.end()); // remove tabs - return static_cast<string>(p); // Umwandlung in string + return temp; } /*==========================================================*/ // last change [10.3.2004] at [9:46] diff --git a/src/basics/basics/utilities/UbFileInputASCIITest.cfg b/src/basics/basics/utilities/UbFileInputASCIITest.cfg new file mode 100644 index 000000000..294d58cd2 --- /dev/null +++ b/src/basics/basics/utilities/UbFileInputASCIITest.cfg @@ -0,0 +1 @@ +test = 1 diff --git a/src/basics/basics/utilities/UbFileInputASCIITest.cpp b/src/basics/basics/utilities/UbFileInputASCIITest.cpp new file mode 100644 index 000000000..87cb5ce58 --- /dev/null +++ b/src/basics/basics/utilities/UbFileInputASCIITest.cpp @@ -0,0 +1,18 @@ +#include <gmock/gmock.h> +#include <filesystem> + +#include <basics/utilities/UbFileInputASCII.h> + + +TEST(UbFileInputASCIITest, readIntegerAfterString) +{ + // assuming that the config files is stored parallel to this file. + std::filesystem::path filePath = __FILE__; + filePath.replace_filename("UbFileInputASCIITest.cfg"); + + UbFileInputASCII sut {filePath.string()}; + + const int actual = sut.readIntegerAfterString("test ="); + + EXPECT_THAT(actual, testing::Eq(1)); +} -- GitLab