ITK  6.0.0
Insight Toolkit
itkCSVFileReaderBase.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
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 * https://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
23#include <limits>
24#include "itkMacro.h"
25#include "itkSize.h"
26#include <fstream>
27#include "ITKIOCSVExport.h"
28
29namespace itk
30{
65class ITKIOCSV_EXPORT CSVFileReaderBase : public LightProcessObject
66{
67public:
68 ITK_DISALLOW_COPY_AND_MOVE(CSVFileReaderBase);
69
75
77 itkOverrideGetNameOfClassMacro(CSVFileReaderBase);
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);
127 void
129
132 void
133 GetNextField(std::string &);
134
142 template <typename TData>
143 TData
144 ConvertStringToValueType(const std::string str)
145 {
146 TData value;
147 std::istringstream isstream(str);
150 if ((isstream >> value).fail() || !(isstream >> std::ws).eof())
151 {
152 return std::numeric_limits<TData>::quiet_NaN();
153 }
154 else
155 {
156 return value;
157 }
158 }
159
165 virtual void
166 Parse() = 0;
167
168protected:
169 std::string m_FileName{};
170 char m_FieldDelimiterCharacter{};
171 char m_StringDelimiterCharacter{};
172 bool m_UseStringDelimiterCharacter{};
173 bool m_HasRowHeaders{};
174 bool m_HasColumnHeaders{};
175 std::ifstream m_InputStream{};
176 int m_EndOfColumnHeadersLine{};
177 std::string m_Line{};
178
180 ~CSVFileReaderBase() override = default;
182 void
183 PrintSelf(std::ostream & os, Indent indent) const override;
184
186 void
188};
189
190} // end namespace itk
191
192#endif
A base class that contains common methods used for parsing csv files.
void PrintSelf(std::ostream &os, Indent indent) const override
void GetDataDimension(SizeValueType &rows, SizeValueType &cols)
TData ConvertStringToValueType(const std::string str)
~CSVFileReaderBase() override=default
virtual void Parse()=0
void GetNextField(std::string &)
Control indentation during Print() invocation.
Definition: itkIndent.h:50
Light weight base class for most itk classes.
LightProcessObject is the base class for all process objects (source, filters, mappers) in the Insigh...
Base class for most ITK classes.
Definition: itkObject.h:62
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
unsigned long SizeValueType
Definition: itkIntTypes.h:86