22 #ifndef UNFIT_INCLUDE_DATAFILEREADER_HPP_ 23 #define UNFIT_INCLUDE_DATAFILEREADER_HPP_ 105 unsigned ReadFile(std::string file_name,
unsigned skip = 0);
145 unsigned RetrieveColumn(std::size_t column_number, std::vector<T> &column,
146 bool return_incomplete_columns =
false);
182 void SplitLine(
const std::string &line,
const std::string &delimiters,
183 std::vector<std::string> &words);
186 std::vector<std::vector<T>>
data;
205 std::ifstream data_file(file_name.c_str());
206 if (!data_file.is_open())
return 1;
208 while (data_file.good()) {
211 getline(data_file, line);
213 std::vector<std::string> words;
221 std::vector<T> numbers;
222 for (
auto entry = 0u; entry < words.size(); ++entry) {
223 std::stringstream ss;
224 ss << words[entry].c_str();
229 if (value > std::numeric_limits<T>::max()) {
235 if (std::numeric_limits<T>::is_integer) {
236 if (value < std::numeric_limits<T>::min()) {
242 -static_cast<long double>(std::numeric_limits<T>::max())) {
246 numbers.push_back(static_cast<T>(value));
250 if (!numbers.empty())
data.push_back( numbers );
252 if (
data.empty())
return 4;
266 std::vector<T> &column,
bool return_incomplete_columns)
269 if (
data.empty())
return 1;
270 std::size_t min_row_length = std::numeric_limits<std::size_t>::max();
271 std::size_t max_row_length = 0u;
272 for (
auto d :
data) {
273 if (d.size() < min_row_length) min_row_length = d.size();
274 if (d.size() > max_row_length) max_row_length = d.size();
276 if (column_number >= max_row_length)
return 2;
277 if (column_number >= min_row_length) {
278 if (return_incomplete_columns) {
279 for (
auto i = 0u; i < data.size(); ++i) {
280 if (data[i].size() > column_number) {
281 column.push_back(data[i][column_number]);
288 column.resize(data.size());
289 for (
auto i = 0u; i < data.size(); ++i) {
290 column[i] = data[i][column_number];
301 std::vector<T> result;
302 for (
auto d :
data) {
303 result.insert(end(result), begin(d), end(d));
311 const std::string &delimiters, std::vector<std::string> &words)
314 auto word_start = line.find_first_not_of(delimiters, 0);
315 auto word_end = line.find_first_of(delimiters, word_start);
318 while (word_start != std::string::npos || word_end != std::string::npos) {
320 words.push_back(line.substr(word_start, (word_end-word_start)));
322 word_start = line.find_first_not_of(delimiters, word_end);
323 word_end = line.find_first_of(delimiters, word_start);
unsigned RetrieveColumn(std::size_t column_number, std::vector< T > &column, bool return_incomplete_columns=false)
Definition: DataFileReader.hpp:265
std::vector< T > RetrieveDataRowWiseAsVector()
Definition: DataFileReader.hpp:298
void AddDelimiters(const std::string &new_delimiters)
Definition: DataFileReader.hpp:258
std::vector< std::vector< T > > data
Definition: DataFileReader.hpp:186
Definition: Bounds.hpp:27
void SplitLine(const std::string &line, const std::string &delimiters, std::vector< std::string > &words)
Definition: DataFileReader.hpp:310
std::string default_delimiters
Definition: DataFileReader.hpp:188
DataFileReader()
Definition: DataFileReader.hpp:193
unsigned ReadFile(std::string file_name, unsigned skip=0)
Definition: DataFileReader.hpp:200
Reads in numeric data from a file.
Definition: DataFileReader.hpp:56