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
155 return value;
156 }
157
163 virtual void
164 Parse() = 0;
165
166protected:
167 std::string m_FileName{};
168 char m_FieldDelimiterCharacter{};
169 char m_StringDelimiterCharacter{};
170 bool m_UseStringDelimiterCharacter{};
171 bool m_HasRowHeaders{};
172 bool m_HasColumnHeaders{};
173 std::ifstream m_InputStream{};
174 int m_EndOfColumnHeadersLine{};
175 std::string m_Line{};
176
178 ~CSVFileReaderBase() override = default;
180 void
181 PrintSelf(std::ostream & os, Indent indent) const override;
182
184 void
186};
187
188} // end namespace itk
189
190#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