@@ -25,21 +25,16 @@ RDataReader::RDataReader(const std::string &locator)
25
25
26
26
void RDataReader::open ()
27
27
{
28
- _parser = rdata_parser_init ();
28
+ if (_filePath.empty ())
29
+ throw std::runtime_error (" File path cannot be empty." );
29
30
30
- if (!_parser)
31
- {
32
- Log::log () << " Failed to initialize parser" << std::endl;
33
- throw std::runtime_error (" Could not access file" );
34
- }
31
+ _parser = rdata_parser_init ();
35
32
36
- if (_filePath.empty ())
37
- throw std::invalid_argument (" File path cannot be empty." );
38
-
39
33
rdata_set_table_handler (_parser, &_tableHandler);
40
34
rdata_set_column_handler (_parser, &_columnHandler);
41
35
rdata_set_text_value_handler (_parser, &_textValueHandler);
42
36
rdata_set_column_name_handler (_parser, &_columnNameHandler);
37
+ rdata_set_error_handler (_parser, &_errorHandler);
43
38
// rdata_set_value_label_handler(_parser, &_valueLabelHandler);
44
39
45
40
rdata_error_t result = rdata_parse (_parser, _filePath.c_str (), &_context);
@@ -49,32 +44,24 @@ void RDataReader::open()
49
44
_columnNames = _context.column_names ;
50
45
_column_data = _context.column_data ;
51
46
52
- std::cout << " Total Columns: " << _colCount << " , Total Rows: " << _rowCount << std::endl;
53
-
54
47
if (result != RDATA_OK)
55
- {
56
- std::cerr << " Failed to parse file: " << rdata_error_message (result) << std::endl;
57
- }
48
+ throw std::runtime_error (" Failed to parse file" );
58
49
59
50
if (_parser)
60
- {
61
51
rdata_parser_free (_parser);
62
- _parser = nullptr ;
63
- }
64
52
}
65
53
66
54
int RDataReader::_tableHandler (const char *name, void *ctx)
67
55
{
68
56
RDataCtx *context = static_cast <RDataCtx *>(ctx);
57
+
69
58
if (!name)
70
- {
71
- context->table_name = " DEF_table_name" ;
72
- }
59
+ context->table_name = " Default_table" ;
73
60
else
74
- {
75
61
context->table_name = name;
76
- // Log::log() << "Table Name: " << name << std::endl;
77
- }
62
+
63
+ Log::log () << " Table Name: " << name << std::endl;
64
+
78
65
return 0 ;
79
66
}
80
67
@@ -138,12 +125,11 @@ int RDataReader::_columnNameHandler(const char *value, int index, void *ctx)
138
125
RDataCtx *context = static_cast <RDataCtx *>(ctx);
139
126
140
127
if (index >= context->column_names .size ())
141
- {
142
128
context->column_names .resize (index + 1 );
143
- }
144
129
145
- context->column_names [index ] = value ? value : " Unnamed_Column" ;
146
- // Log::log() << "Column name [Index " << index << "]: " << context->column_names[index] << std::endl;
130
+ context->column_names [index ] = value ? std::string (value) : " Column_" + std::to_string (index + 1 );
131
+ // Log::log() << "Column name : " << value << " [Index " << index << "]: " << context->column_names[index] << std::endl;
132
+
147
133
return 0 ;
148
134
}
149
135
@@ -154,6 +140,7 @@ void RDataReader::_errorHandler(const char *error_message, void *ctx)
154
140
155
141
int RDataReader::_textValueHandler (const char *value, int index, void *ctx)
156
142
{
143
+ // This handled if data type in _columnHandler is "RDATA_TYPE_STRING", because it's empty!
157
144
RDataCtx *context = static_cast <RDataCtx *>(ctx);
158
145
159
146
if (context->column_data .empty ())
@@ -175,5 +162,6 @@ int RDataReader::_textValueHandler(const char *value, int index, void *ctx)
175
162
176
163
int RDataReader::_valueLabelHandler (const char *value, int index, void *ctx)
177
164
{
165
+ // TODO: implement importing factor level as label
178
166
return 0 ;
179
167
}
0 commit comments