libpniio
spreadsheet_reader.hpp
Go to the documentation of this file.
1 //
2 // (c) Copyright 2011 DESY, Eugen Wintersberger <eugen.wintersberger@desy.de>
3 //
4 // This file is part of libpniio.
5 //
6 // libpniio is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 2 of the License, or
9 // (at your option) any later version.
10 //
11 // libpniio is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with libpniio. If not, see <http://www.gnu.org/licenses/>.
18 // ===========================================================================
19 //
20 // Created on: Apr 30, 2012
21 // Author: Eugen Wintersberger <eugen.wintersberger@desy.de>
22 //
23 //
24 #pragma once
25 
26 #include <vector>
27 #include <boost/current_function.hpp>
28 #include <pni/core/types.hpp>
29 #include <pni/core/error.hpp>
30 #include "data_reader.hpp"
31 #include "column_info.hpp"
32 
33 namespace pni{
34 namespace io{
35 
45  {
46  private:
47  std::vector<column_info> _columns_info;
48  size_t _nrec;
49 
50  protected:
51  //============constructors and destructor==========================
54 
56  spreadsheet_reader(const spreadsheet_reader &) = delete;
57 
60 
62  spreadsheet_reader(const pni::core::string &n);
63 
64  //==================protected member functions======================
73  virtual void _append_column(const column_info &i)
74  {
75  _columns_info.push_back(i);
76  }
77 
78  //-----------------------------------------------------------------
88  virtual column_info _get_column(size_t i) const
89  {
90  return _columns_info.at(i);
91  }
92 
93  //-----------------------------------------------------------------
104  virtual column_info _get_column(const pni::core::string &n) const
105  {
106  using namespace pni::core;
107  size_t i=0;
108  for(auto c: _columns_info)
109  {
110  if(c.name() == n)
111  return _get_column(i);
112 
113  //increment column counter
114  i++;
115  }
116 
117  throw key_error(EXCEPTION_RECORD,"Column ["+n+"] not found!");
118 
119  return column_info(); //just to get rid of compiler warning
120  }
121 
122  //-----------------------------------------------------------------
131  void _nrecords(size_t n) { _nrec = n; }
132 
133 
134  public:
135  //========================public type==============================
137  typedef std::vector<column_info>::iterator iterator;
139  typedef std::vector<column_info>::const_iterator const_iterator;
140  //=======================destructor================================
142  virtual ~spreadsheet_reader();
143 
144  //===================assignment operators==========================
147 
148  //-----------------------------------------------------------------
151 
152  //===============public memeber methods============================
159  size_t ncolumns() const
160  {
161  return _columns_info.size();
162  }
163 
164  //-----------------------------------------------------------------
171  size_t nrecords() const { return _nrec; }
172 
173  //-----------------------------------------------------------------
180  iterator begin() { return _columns_info.begin(); }
181 
182  //-----------------------------------------------------------------
189  const_iterator begin() const { return _columns_info.begin(); }
190 
191  //-----------------------------------------------------------------
198  iterator end() { return _columns_info.end(); }
199 
200  //-----------------------------------------------------------------
208  const_iterator end() const { return _columns_info.end(); }
209 
210  //-----------------------------------------------------------------
220  bool has_column(const pni::core::string &name) const;
221 
222  //-----------------------------------------------------------------
231  size_t column_index(const pni::core::string &name) const;
232 
233  };
234 
235 
236 //end of namespace
237 }
238 }
239 
spreadsheet_reader()
default constructor
Definition: spreadsheet_reader.cpp:32
size_t column_index(const pni::core::string &name) const
get column index
Definition: spreadsheet_reader.cpp:86
size_t ncolumns() const
get column number
Definition: spreadsheet_reader.hpp:159
base class for data readers
Definition: data_reader.hpp:45
size_t _nrec
number of records in the sheet
Definition: spreadsheet_reader.hpp:48
const_iterator end() const
get const last iterator
Definition: spreadsheet_reader.hpp:208
bool has_column(const pni::core::string &name) const
checks if a particular column exists
Definition: spreadsheet_reader.cpp:69
size_t nrecords() const
get record number
Definition: spreadsheet_reader.hpp:171
virtual ~spreadsheet_reader()
destructor
Definition: spreadsheet_reader.cpp:52
virtual column_info _get_column(size_t i) const
get column information
Definition: spreadsheet_reader.hpp:88
Definition: cbf_reader.hpp:41
void _nrecords(size_t n)
set number of records
Definition: spreadsheet_reader.hpp:131
base class for spreadsheet reader
Definition: spreadsheet_reader.hpp:44
std::vector< column_info > _columns_info
column information
Definition: spreadsheet_reader.hpp:47
std::vector< column_info >::const_iterator const_iterator
const iterator type
Definition: spreadsheet_reader.hpp:139
spreadsheet_reader & operator=(const spreadsheet_reader &)=delete
copy assignment operator is deleted
virtual void _append_column(const column_info &i)
append a column
Definition: spreadsheet_reader.hpp:73
iterator end()
get last iterator
Definition: spreadsheet_reader.hpp:198
std::vector< column_info >::iterator iterator
iterator type
Definition: spreadsheet_reader.hpp:137
iterator begin()
get iterator to first column
Definition: spreadsheet_reader.hpp:180
Spreadsheet column information.
Definition: column_info.hpp:43
const_iterator begin() const
get const first iterator
Definition: spreadsheet_reader.hpp:189
virtual column_info _get_column(const pni::core::string &n) const
get column information
Definition: spreadsheet_reader.hpp:104