CSV-Filereader impl

Implements CSV-Filereader.

Summary
CSV-Filereader implImplements CSV-Filereader.
CopyrightThis program is free software.
Files
C-kern/api/io/reader/csvfilereader.hHeader file CSV-Filereader.
C-kern/io/reader/csvfilereader.cImplementation file CSV-Filereader impl.
Types
csvfilereader_parsestate_tExport csvfilereader_parsestate_t into global namespace.
csvfilereader_parsestate_tState held during parsing of input data.
Variables
dataStart address of text data.
lengthLength of text data in bytes.
offsetByte offset into text data.
offsetByte offset to current start of line.
linenrCurrent text line nr.
Macros
csvfilereader_parsestate_INITStatic initializer.
Functions
skipempty_csvfilereaderparsestateIncrements offset until next non empty data line is found.
parsechar_csvfilereaderparsestateExpects the next character to be of value chr.
parsedatafield_csvfilereaderparsestateParses value between two double quotes.
parsenrcolumns_csvfilereaderparsestateCounts the number of data fields of the first line.
csvfilereader_t
helper
tablesize_csvfilereaderReturns size in bytes of csvfilereader_t.tablevalues.
lifetime
test

Copyright

This program is free software.  You can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

Author

© 2012 Jörg Seebohn

Files

C-kern/api/io/reader/csvfilereader.h

Header file CSV-Filereader.

C-kern/io/reader/csvfilereader.c

Implementation file CSV-Filereader impl.

Types

csvfilereader_parsestate_t

typedef struct csvfilereader_parsestate_t csvfilereader_parsestate_t

Export csvfilereader_parsestate_t into global namespace.

csvfilereader_parsestate_t

struct csvfilereader_parsestate_t

State held during parsing of input data.

Summary
Variables
dataStart address of text data.
lengthLength of text data in bytes.
offsetByte offset into text data.
offsetByte offset to current start of line.
linenrCurrent text line nr.
Macros
csvfilereader_parsestate_INITStatic initializer.
Functions
skipempty_csvfilereaderparsestateIncrements offset until next non empty data line is found.
parsechar_csvfilereaderparsestateExpects the next character to be of value chr.
parsedatafield_csvfilereaderparsestateParses value between two double quotes.
parsenrcolumns_csvfilereaderparsestateCounts the number of data fields of the first line.

Variables

data

const uint8_t * data/*length*/

Start address of text data.

length

size_t length

Length of text data in bytes.

offset

size_t offset

Byte offset into text data.

offset

Byte offset to current start of line.  Used to calculate the column number.

linenr

size_t linenr

Current text line nr.

Macros

csvfilereader_parsestate_INIT

#define csvfilereader_parsestate_INIT(length,
data) { data, length, 0, 0, 1 }

Static initializer.

Functions

skipempty_csvfilereaderparsestate

static void skipempty_csvfilereaderparsestate(csvfilereader_parsestate_t *state)

Increments offset until next non empty data line is found.  Comments begins with a ‘#’ and extends until end of line.

parsechar_csvfilereaderparsestate

static int parsechar_csvfilereaderparsestate(csvfilereader_parsestate_t *state,
uint8_t chr)

Expects the next character to be of value chr.  If there end of input is reached or the next charater does not match chr EINVAL is returned.  Else the character is consumed.

parsedatafield_csvfilereaderparsestate

static int parsedatafield_csvfilereaderparsestate(
   csvfilereader_parsestate_t *state,
   /*out*/string_t *value
)

Parses value between two double quotes.  The function expects the current offset at the first double quote character.

parsenrcolumns_csvfilereaderparsestate

static int parsenrcolumns_csvfilereaderparsestate(
   csvfilereader_parsestate_t *state,
   /*out*/size_t *nrcolumns
)

Counts the number of data fields of the first line.

csvfilereader_t

helper

tablesize_csvfilereader

static inline size_t tablesize_csvfilereader(csvfilereader_t *csvfile)

Returns size in bytes of csvfilereader_t.tablevalues.

lifetime

test

Supports reading a CSV text file.
Implements CSV-Filereader.
typedef struct csvfilereader_parsestate_t csvfilereader_parsestate_t
Export csvfilereader_parsestate_t into global namespace.
const uint8_t * data/*length*/
Start address of text data.
size_t length
Length of text data in bytes.
size_t offset
Byte offset into text data.
size_t linenr
Current text line nr.
#define csvfilereader_parsestate_INIT(length,
data) { data, length, 0, 0, 1 }
Static initializer.
static void skipempty_csvfilereaderparsestate(csvfilereader_parsestate_t *state)
Increments offset until next non empty data line is found.
static int parsechar_csvfilereaderparsestate(csvfilereader_parsestate_t *state,
uint8_t chr)
Expects the next character to be of value chr.
static int parsedatafield_csvfilereaderparsestate(
   csvfilereader_parsestate_t *state,
   /*out*/string_t *value
)
Parses value between two double quotes.
static int parsenrcolumns_csvfilereaderparsestate(
   csvfilereader_parsestate_t *state,
   /*out*/size_t *nrcolumns
)
Counts the number of data fields of the first line.
static inline size_t tablesize_csvfilereader(csvfilereader_t *csvfile)
Returns size in bytes of csvfilereader_t.tablevalues.
struct string_t * tablevalues/*[nrrows][nrcolumns]*/
Table of strings indexing memory mapped file.
Close