From e44d3421ded726f48cce2e400602356cdad448a2 Mon Sep 17 00:00:00 2001 From: frank Date: Sat, 27 Jan 2018 12:07:06 +0100 Subject: [PATCH] fixed issue within file-reader when reading empty data-parts --- sensors/offline/FileReader.h | 21 ++++++++++++++++----- sensors/offline/Splitter.h | 2 ++ tests/Tests.h | 3 ++- tests/data/fileReader1.txt | 5 +++++ tests/sensors/offline/TestReader.cpp | 18 ++++++++++++++++++ 5 files changed, 43 insertions(+), 6 deletions(-) create mode 100644 tests/data/fileReader1.txt create mode 100644 tests/sensors/offline/TestReader.cpp diff --git a/sensors/offline/FileReader.h b/sensors/offline/FileReader.h index 6bf055e..03f7665 100644 --- a/sensors/offline/FileReader.h +++ b/sensors/offline/FileReader.h @@ -156,16 +156,25 @@ namespace Offline { while(!inp.eof() && !inp.bad()) { + // read the next line from the file + // this ensures that we will not read beyond one line within the next steps + std::string line; + std::getline(inp, line); + + // create a stream for the read line + std::stringstream sline(line); + uint64_t ts; char delim; int idx = -1; std::string data; - inp >> ts; - inp >> delim; - inp >> idx; - inp >> delim; - inp >> data; + // split the line + sline >> ts; + sline >> delim; + sline >> idx; + sline >> delim; + sline >> data; // might be "" if there is no data if (idx == (int)Sensor::WIFI) {parseWiFi(ts, data);} else if (idx == (int)Sensor::BEACON) {parseBeacons(ts, data);} @@ -267,6 +276,8 @@ namespace Offline { WiFiMeasurements wifi; Splitter s(data, sep); + //if (s.empty()) {return;} + // the -1 is due to some old files containing a trailing ";" resulting in one additional stray column for (size_t i = 0; i < s.size()-1; i += 3) { diff --git a/sensors/offline/Splitter.h b/sensors/offline/Splitter.h index ae09d43..d78751f 100644 --- a/sensors/offline/Splitter.h +++ b/sensors/offline/Splitter.h @@ -28,6 +28,8 @@ public: size_t size() const {return split.size();} + bool empty() const {return split.empty();} + private: void build() { diff --git a/tests/Tests.h b/tests/Tests.h index 3639618..d75eaa2 100755 --- a/tests/Tests.h +++ b/tests/Tests.h @@ -7,7 +7,8 @@ static inline std::string getDataFile(const std::string& name) { //return "/mnt/data/workspaces/Indoor/tests/data/" + name; - return "/home/toni/Documents/programme/localization/Indoor/tests/data/" + name; + return "/mnt/vm/paper/diss/code/Indoor/tests/data/" + name; + //return "/home/toni/Documents/programme/localization/Indoor/tests/data/" + name; } diff --git a/tests/data/fileReader1.txt b/tests/data/fileReader1.txt new file mode 100644 index 0000000..247ae85 --- /dev/null +++ b/tests/data/fileReader1.txt @@ -0,0 +1,5 @@ +136731;0;1.6424103;2.4756012;14.106628 +136728;8; +136731;1;0.5573883;2.0301208;9.57785 +136733;3;-0.8585968;-1.057785;-1.1313019 +136831;8;68c63a9f81f1;2422;-55;5ccf7fc40df3;2422;-66 diff --git a/tests/sensors/offline/TestReader.cpp b/tests/sensors/offline/TestReader.cpp new file mode 100644 index 0000000..06a0882 --- /dev/null +++ b/tests/sensors/offline/TestReader.cpp @@ -0,0 +1,18 @@ +#ifdef WITH_TESTS + +#include "../../Tests.h" + +#include "../../../sensors/offline/FileReader.h" + +TEST(FileReader, test1) { + + std::string file = "/tmp/FirstTest.csv";//getDataFile("fileReader1.txt"); + Offline::FileReader reader(file); + + int i = 0; (void) i; + +} + + + +#endif