Provided by: libbobcat-dev_4.01.03-2ubuntu1_amd64 bug

NAME

       FBB::CSV - Converter for comma separated values

SYNOPSIS

       #include <bobcat/csv>

       Linking option: -lbobcat

DESCRIPTION

       Objects  of  the  class  CSV  can  be  used to convert series of comma separated values to the individual
       separated values. These values may be converted (individually or as a group) to standard  integral  types
       int,  size_t,  long  long,  etc.,  to  floating  point types (float, double, long double), or they can be
       accessed as std::string values.

NAMESPACE

       FBB
       All constructors, members, operators and manipulators, mentioned in this man-page,  are  defined  in  the
       namespace FBB.

INHERITS FROM

       -

TYPEDEFS AND ENUMS

       The enum Mode specifies how a CSV is extracted from std::istream objects:

       o      TRAILINGCOMMA  a series of comma-separated values ends at a final comma, which is removed from the
              istream by the CSV extraction operator.

       o      LINE  after  extracting a CSV object any remaining characters on the current std::istream line are
              ignored (i.e., the extraction operator reads full lines of input).  These enumeration  values  may
              be combined using the bit-or operator.

       The enum InsertType specifies how a CSV is inserted into std::ostream objects:

       o      LENGTH  indicates  that  all  specifications (i.e., the length of the type-specifications, see the
              member length below), are inserted into the std::ostream as a series of comma-separated values.

       o      SIZE indicates that all (not ignored) comma-separated fields (i.e., the size of the fields vector,
              see the member size below), are inserted into the std::ostream  as  a  series  of  comma-separated
              values.

       o      COUNT  indicates that all valid (i.e., the count of the valid fields, see the member count below),
              are inserted into the std::ostream as a series of comma-separated values.

       The  class  CSV  defines  the  nested  classes  const_iterator  and  const_reverse_iterator   which   are
       InputIterators, which can be used to iterate over the sequence of comma-separated values.

CONSTRUCTORS

       o      CSV(std::string const &specification, Mode mode = LINE, InsertType = LENGTH):
              The  specification  in  specification  defines the subsequent fields of the comma-separated value.
              Specifications are

              o      S: the field is left as-is, and can be retrieved as a std::string.

              o      I: the field represents an int value;

              o      D: the field represents a double value;

              o      X or -: the field is ignored and is not stored  inside  the  CSV  object.  E.g.,  with  the
                     specification  SXS  two  fields  will  actually  be  stored  inside the CSV object: field 0
                     contains the first field extracted from the input stream, field 1 contains the third  field
                     extracted from the input stream.
       Specifications  may  be  separated  by  space  or  tab  characters,  which  are  ignored.  The  number of
       specification characters determines the number of fields that are stored in a CSV object. The final field
       may or may not be followed by a comma.

              Each specification may also be followed by a positive integral value, indicating that the input at
              that point contains that number of comma-separated fields of the specified type.

              By default the CSV extraction operator extracts complete lines from the stream from  which  a  CSV
              object is extracted.

              When  inserting  a  CSV  object  into  a  std::ostream  object  all  fields  that are specified by
              `specification’ will be inserted. Ignored fields will be inserted as single blanks.  The  default,
              copy, and move constructors are available.

OVERLOADED OPERATORS

       o      std::string const &operator[](size_t index) const:
              The contents of the indicated field is returned as a std::string.

       o      std::istream &operator>>(std::istream &out, CSV const &csv):
              The data fields stored within csv are inserted into out as a series of comma-separated values. The
              fields are inserted according to the latest InsertType specification:

              o      For  LENGTH  all  fields are inserted according to their original type specification, where
                     ’X’ and ’-’ fields are inserted as fields of single blank spaces;

              o      For SIZE all fields that are stored inside csv are inserted `as-is’;

              o      For COUNT all valid fields are inserted.
       If csv’s Mode specification contains TRAILINGCOMMA then a comma is expected and extracted beyond the last
       field; if it contains LINE then any information  that  is  found  on  the  line  beyond  the  last  field
       (including its terminating comma, if applicable) is ignored (including the ’\n’ line terminator).

       o      std::ostream &operator<<(std::ostream &out, CSV const &csv):
              The data fields stored within csv are inserted into out as a series of comma-separated values. The
              fields are inserted according to the latest InsertType specification:

              o      For  LENGTH  all  fields are inserted according to their original type specification, where
                     ’X’ and ’-’ fields are inserted as fields of single blank spaces;

              o      For SIZE all fields that are stored inside csv are inserted `as-is’;

              o      For COUNT all valid fields are inserted.
       If csv’s Mode specification contains TRAILINGCOMMA then a comma is inserted beyond the last field.

       The copy and move assignment operators are available.

MEMBER FUNCTIONS

       o      CSV &append(char spec, std::string const &value = ""):
              A field spec, with textual representation value is added to the object’s current set of  fiels.  A
              specification ’X’ or ’-’ is added to the object’s set of specifications, but does not add value to
              the currently stored set of values.

       o      std::vector<bool> const &available() const:
              A  vector  of  bool  values indicating which of the matching data fields are valid (i.e., could be
              converted to its specification as defined at construction time or by setSpec) is returned.

       o      CSV::const_iterator<Type> begin<Type == std::string>() const:
              This is a template member returning a  CSV::const_iterator  to  the  object’s  first  field.  When
              dereferencing  a  const_iterator the value it refers to is converted to the indicated Type. If the
              conversion fails, the Type’s default value is returned.

       o      size_t count() const:
              The number of fields that could actually be converted to their indicated types is returned.  E.g.,
              an  empty  field or a supposedly numeric field whose contents cannot be converted to the indicated
              numeric value won’t be counted here.

       o      std::vector<std::string> const &data() const:
              The vector of fields stored inside the CSV object is returned.

       o      CSV::const_iterator<Type> end<Type == std::string>() const:
              This is a template member returning a CSV::const_iterator pointing just beyond  the  CSV  object’s
              last field.

       o      Type field<Type = std::string>(size_t idx) const:
              This  is a template member returning the contents of field idx as a value of type Type.  When Type
              equals std::string a std::string const & is returned. For Type all integral and floating types  as
              well  as  std::sting  are  accepted.  If field idx cannot be converted to Type a std::exception is
              thrown.

       o      Type get<Type = std::string>(size_t idx):
              This is a template member returning the contents of field idx as a value of type Type.  When  Type
              equals  std::string a std::string const & is returned. For Type all integral and floating types as
              well as std::sting are accepted. If field idx cannot be converted  to  Type,  the  Type’s  default
              value is returned.

       o      InsertType insertType() const:
              The object’s current InsertType is returned.

       o      size_t length() const:
              The  number of specifications (defined at construction time or by the setSpec member) is returned.
              This count includes the number of X and - specifications.

       o      CSV::Mode mode() const:
              The object’s current Mode value is returned.

       o      std::string const &spec() const:
              The object’s current field-type specifications are returned.

       o      CSV::const_reverse_iterator<Type> rbegin<Type == std::string>() const:
              This is a template member returning a CSV::const_reverse_iterator to the object’s last field. When
              dereferencing a const_reverse_iterator the value it refers to is converted to the indicated  Type.
              If the conversion fails, the Type’s default value is returned.

       o      CSV::const_iterator<Type> rend<Type == std::string>() const:
              This  is  a  template  member returning a CSV::const_reverse_iterator pointing just before the CSV
              object’s first field.

       o      void setInsertType(InsertType insertType):
              The objects InsertType is changed to insertType.  This  has  no  immediate  effect,  but  is  only
              interpreted with the insertion operator.

       o      void setMode(Mode mode):
              The  object’s  current  Mode  value  is changed to mode. This has no immediate effect, but is only
              interpreted with the insertion and extraction operators.

       o      void setSpec(std::string const &spec):
              The information stored inside the CSV object is erased, and a new field-specification  is  defined
              from spec.

       o      size_t size() const:
              The  number  of  fields  is  returned  (the returned value equals the value returned by length not
              counting the X and - fields).

EXAMPLE

       #include <iostream>
       #include <bobcat/csv>

       using namespace std;
       using namespace FBB;

       int main()
       {
           CSV csv("I5 X2 S2 D3");

           cin >> csv;

           cout <<
               "Nr. of field specs: " << csv.length() << "\n"
               "Nr. of fields: " << csv.size() << "\n"
               "Nr. of available fields: " << csv.count() << "\n"
               "Field 2 as int via get: " << csv.get<int>(2) << "\n"
               "Field 2 as int via available: " << csv.field<int>(2) << "\n"
               "Field 3 via operator[]: " << csv[3] << "\n"
               "Field 6 as string via get: " << csv.get<string>(6) << "\n"
               "Field 6 as string via available: " << csv.field<string>(6) << "\n"
           ;

           cout << "First element as string: " << *csv.begin() << "\n";

           cout << "All elements as strings:\n";
           copy(csv.begin(), csv.end(), ostream_iterator<string>(cout, " "));
           cout << ’\n’;

           cout << "All elements as ints:\n";
           copy(csv.begin<int>(), csv.end<int>(), ostream_iterator<int>(cout, " "));
           cout << ’\n’;

           cout << "All elements as strings, backward:\n";
           copy(csv.rbegin(), csv.rend(), ostream_iterator<string>(cout, " "));
           cout << ’\n’;

           cout << "All elements as ints, backward:\n";
           copy(csv.rbegin<int>(), csv.rend<int>(), ostream_iterator<int>(cout, " "));
           cout << ’\n’;

           cout << "Insert LENGTH (default):\n" <<
                   csv << ’\n’;

           csv.setInsertType(CSV::SIZE);

           cout << "Insert SIZE:\n" <<
                   csv << ’\n’;

           csv.setInsertType(CSV::COUNT);

           cout << "Insert COUNT:\n" <<
                   csv << ’\n’;
       }

FILES

       bobcat/csv - defines the class interface

SEE ALSO

       bobcat(7)

BUGS

       None Reported.

DISTRIBUTION FILES

       o      bobcat_4.01.03-x.dsc: detached signature;

       o      bobcat_4.01.03-x.tar.gz: source archive;

       o      bobcat_4.01.03-x_i386.changes: change log;

       o      libbobcat1_4.01.03-x_*.deb: debian package holding the libraries;

       o      libbobcat1-dev_4.01.03-x_*.deb: debian package holding the libraries, headers and manual pages;

       o      http://sourceforge.net/projects/bobcat: public archive location;

BOBCAT

       Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

COPYRIGHT

       This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).

libbobcat-dev_4.01.03-x.tar.gz                      2005-2015                                  FBB::CSV(3bobcat)