diff --git a/Infovis/vtkDelimitedTextReader.cxx b/Infovis/vtkDelimitedTextReader.cxx index d8feb6d53448226588f4b313c268e22ca422e1d1..608aea6a0aeb18c2bc2827596b2892248f5a3e86 100644 --- a/Infovis/vtkDelimitedTextReader.cxx +++ b/Infovis/vtkDelimitedTextReader.cxx @@ -31,7 +31,7 @@ #include <vtkstd/vector> #include <vtkstd/string> -vtkCxxRevisionMacro(vtkDelimitedTextReader, "1.8"); +vtkCxxRevisionMacro(vtkDelimitedTextReader, "1.9"); vtkStandardNewMacro(vtkDelimitedTextReader); struct vtkDelimitedTextReaderInternals @@ -44,6 +44,7 @@ static int splitString(const vtkStdString& input, char fieldDelimiter, char stringDelimiter, bool useStringDelimiter, + bool mergeConsecutiveDelimiters, vtkstd::vector<vtkStdString>& results, bool includeEmpties=true); @@ -169,6 +170,7 @@ int vtkDelimitedTextReader::RequestData( this->FieldDelimiter, this->StringDelimiter, this->UseStringDelimiter, + this->MergeConsecutiveDelimiters, headers); } else @@ -177,6 +179,7 @@ int vtkDelimitedTextReader::RequestData( this->FieldDelimiter, this->StringDelimiter, this->UseStringDelimiter, + this->MergeConsecutiveDelimiters, firstLineFields); for (unsigned int i = 0; i < firstLineFields.size(); ++i) @@ -236,6 +239,7 @@ int vtkDelimitedTextReader::RequestData( this->FieldDelimiter, this->StringDelimiter, this->UseStringDelimiter, + this->MergeConsecutiveDelimiters, dataVector); vtkDebugMacro(<<"Split into " << dataVector.size() << " fields"); @@ -270,6 +274,7 @@ splitString(const vtkStdString& input, char fieldDelimiter, char stringDelimiter, bool useStringDelimiter, + bool mergeConsecutiveDelimiters, vtkstd::vector<vtkStdString>& results, bool includeEmpties) { @@ -328,6 +333,11 @@ splitString(const vtkStdString& input, } else if (thisCharacter == fieldDelimiter && !inString) { + if (mergeConsecutiveDelimiters && lastCharacter == fieldDelimiter) + { + continue; // We're in the middle of a string of delimiters. + } + // A delimiter starts a new field unless we're in a string, in // which case it's normal text and we won't even get here. if (includeEmpties || currentField.size() > 0) diff --git a/Infovis/vtkDelimitedTextReader.h b/Infovis/vtkDelimitedTextReader.h index 7625d777ff5c4552b6ab949c48489b23db48817e..faf335bb73a6983b5c247e398217fa4099ed17cc 100644 --- a/Infovis/vtkDelimitedTextReader.h +++ b/Infovis/vtkDelimitedTextReader.h @@ -84,6 +84,14 @@ public: vtkGetMacro(HaveHeaders,bool); vtkSetMacro(HaveHeaders,bool); + // Description: + // Set/get whether to merge successive delimiters. Use this if (for + // example) your fields are separated by spaces but you don't know + // exactly how many. + vtkSetMacro(MergeConsecutiveDelimiters, bool); + vtkGetMacro(MergeConsecutiveDelimiters, bool); + vtkBooleanMacro(MergeConsecutiveDelimiters, bool); + protected: vtkDelimitedTextReader(); ~vtkDelimitedTextReader();