From fe110e2ae08a82bbf5ba096a9d39971d71ed2d72 Mon Sep 17 00:00:00 2001 From: Andy Cedilnik Date: Wed, 4 May 2005 11:37:01 -0400 Subject: [PATCH] ENH: Add split that splits on arbitrary separator --- Source/kwsys/SystemTools.cxx | 25 +++++++++++++++++++++++++ Source/kwsys/SystemTools.hxx.in | 1 + 2 files changed, 26 insertions(+) diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx index 5d4825b0c..ebb26dca0 100644 --- a/Source/kwsys/SystemTools.cxx +++ b/Source/kwsys/SystemTools.cxx @@ -2466,6 +2466,31 @@ bool SystemTools::ComparePath(const char* c1, const char* c2) #endif } +//---------------------------------------------------------------------------- +bool SystemTools::Split(const char* str, kwsys_stl::vector& lines, char separator) +{ + kwsys_stl::string data(str); + kwsys_stl::string::size_type lpos = 0; + while(lpos < data.length()) + { + kwsys_stl::string::size_type rpos = data.find_first_of(separator, lpos); + if(rpos == kwsys_stl::string::npos) + { + // Line ends at end of string without a newline. + lines.push_back(data.substr(lpos)); + return false; + } + else + { + // Line ends in a "\n", remove the character. + lines.push_back(data.substr(lpos, rpos-lpos)); + } + lpos = rpos+1; + } + return true; +} + +//---------------------------------------------------------------------------- bool SystemTools::Split(const char* str, kwsys_stl::vector& lines) { kwsys_stl::string data(str); diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in index 59cd008c6..ca246166f 100644 --- a/Source/kwsys/SystemTools.hxx.in +++ b/Source/kwsys/SystemTools.hxx.in @@ -189,6 +189,7 @@ public: * Return false only if the last line stored had no newline */ static bool Split(const char* s, kwsys_stl::vector& l); + static bool Split(const char* s, kwsys_stl::vector& l, char separator); /** * Return string with space added between capitalized words