ITK  4.13.0
Insight Segmentation and Registration Toolkit
itkCSVFileReaderBase.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 
19 #ifndef itkCSVFileReaderBase_h
20 #define itkCSVFileReaderBase_h
21 
22 #include "itkLightProcessObject.h"
23 #if !defined( ITK_LEGACY_FUTURE_REMOVE )
24 # include <vcl_limits.h>
25 #endif
26 #include <limits>
27 #include "itkMacro.h"
28 #include "itkSize.h"
29 #include <fstream>
30 #include "ITKIOCSVExport.h"
31 
32 namespace itk
33 {
67 class ITKIOCSV_EXPORT CSVFileReaderBase:public LightProcessObject
68 {
69 public:
75 
78 
80  itkSetStringMacro(FileName);
81 
85  itkSetMacro(FieldDelimiterCharacter,char);
86 
88  itkGetMacro(FieldDelimiterCharacter, char);
89 
92  itkSetMacro(UseStringDelimiterCharacter,bool);
93 
95  itkGetConstMacro(UseStringDelimiterCharacter, bool);
96 
98  itkSetMacro(StringDelimiterCharacter,char);
99 
101  itkGetMacro(StringDelimiterCharacter, char);
102 
105  itkSetMacro(HasRowHeaders,bool);
106 
108  itkGetConstMacro(HasRowHeaders,bool);
109 
112  itkSetMacro(HasColumnHeaders,bool);
113 
115  itkGetConstMacro(HasColumnHeaders, bool);
116 
120  itkBooleanMacro(HasRowHeaders);
121  itkBooleanMacro(HasColumnHeaders);
122  itkBooleanMacro(UseStringDelimiterCharacter);
124 
127  void GetDataDimension(SizeValueType & rows, SizeValueType & columns);
128 
131  void GetNextField(std::string & );
132 
140  template <typename TData>
141  TData ConvertStringToValueType(const std::string str)
142  {
143  TData value;
144  std::istringstream isstream(str);
146 
147  if ((isstream >> value).fail() || !(isstream >> std::ws).eof())
148  {
149  return std::numeric_limits<TData>::quiet_NaN();
150  }
151  else
152  {
153  return value;
154  }
155  }
156 
162  virtual void Parse()=0;
163 
164 protected:
165  std::string m_FileName;
171  std::ifstream m_InputStream;
173  std::string m_Line;
174 
176  virtual ~CSVFileReaderBase() ITK_OVERRIDE {}
178  virtual void PrintSelf(std::ostream & os, Indent indent) const ITK_OVERRIDE;
179 
181  void PrepareForParsing();
182 
183 private:
184  ITK_DISALLOW_COPY_AND_ASSIGN(CSVFileReaderBase);
185 };
186 
187 } //end namespace itk
188 
189 #endif
virtual ~CSVFileReaderBase() override
unsigned long SizeValueType
Definition: itkIntTypes.h:143
LightProcessObject Superclass
SmartPointer< Self > Pointer
SmartPointer< const Self > ConstPointer
LightProcessObject is the base class for all process objects (source, filters, mappers) in the Insigh...
Control indentation during Print() invocation.
Definition: itkIndent.h:49
A base class that contains common methods used for parsing csv files.
TData ConvertStringToValueType(const std::string str)