Release 18.08
diff --git a/src/armnnUtils/CsvReader.cpp b/src/armnnUtils/CsvReader.cpp
new file mode 100644
index 0000000..5b66c94
--- /dev/null
+++ b/src/armnnUtils/CsvReader.cpp
@@ -0,0 +1,63 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// See LICENSE file in the project root for full license information.
+//
+
+#include "CsvReader.hpp"
+
+#include <boost/algorithm/string.hpp>
+#include <boost/tokenizer.hpp>
+
+#include <fstream>
+#include <string>
+#include <vector>
+
+using Tokenizer = boost::tokenizer<boost::escaped_list_separator<char>>;
+
+namespace armnnUtils
+{
+
+CsvRow ParseLine(const std::string& csvLine)
+{
+    Tokenizer tokenizer(csvLine);
+    CsvRow entry;
+
+    for (const auto &token : tokenizer)
+    {
+        entry.values.push_back(boost::trim_copy(token));
+    }
+    return entry;
+}
+
+std::vector<CsvRow> CsvReader::ParseFile(const std::string& csvFile)
+{
+    std::vector<CsvRow> result;
+
+    std::ifstream in(csvFile.c_str());
+    if (!in.is_open())
+        return result;
+
+    std::string line;
+    while (getline(in, line))
+    {
+        if(!line.empty())
+        {
+            CsvRow entry = ParseLine(line);
+            result.push_back(entry);
+        }
+    }
+    return result;
+}
+
+std::vector<CsvRow> CsvReader::ParseVector(const std::vector<std::string>& csvVector)
+{
+    std::vector<CsvRow> result;
+
+    for (auto const& line: csvVector)
+    {
+        CsvRow entry = ParseLine(line);
+        result.push_back(entry);
+    }
+    return result;
+}
+} // namespace armnnUtils
\ No newline at end of file