/* * Copyright 2010 Nathan Phillip Brink * * This file is a part of DistRen. * * DistRen is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * DistRen 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with DistRen. If not, see . */ #ifndef _DISTREN_CSV_H #define _DISTREN_CSV_H #include #include /** * \brief * A single row in a CSV. */ struct csv_row { /** * \brief * An array of NULL-terminated strings representing each column of * a row in a CSV * * There are num_cols indexes to this array. */ char **cols; size_t num_cols; }; /** * \brief * A row handle. */ typedef struct csv_row *csv_row_t; /** * \brief * Initialize a row handle. * \param columns * The number of columns this row handle shall have. */ csv_row_t csv_row_init(size_t columns); /** * \brief * Parses a CSV file with a predetermined number of columns. * * If a line of the CSV file contains fewer columns than passed in by * the columns parameter, then the missing columns are just set to * instances of the empty string. If a line of the CSV file contains * more columns than specified by the columns parameter, then the * extra columns of the input are silently ignored. * * \param inbuf * A NULL-terminated string to parse as CSV. * \param columns * The number of columns the result should have. * * \return * A list of csv_row_t handles. */ list_t csv_parse(const char *inbuf, size_t columns); /** * \brief * Frees a row allocated by csv_parse() or csv_row() * * You may use this in conjunction with list_free() to free an entire * CSV. Use list_free(csv_row_list, * (list_dealloc_func_t)&csv_row_free); * * \param row * The row to free. */ void csv_row_free(csv_row_t row); #endif /* _DISTREN_CSV_H */