6#ifndef __CSV_PARSER_H__
7#define __CSV_PARSER_H__
21#ifndef CSV_ARENA_BLOCK_SIZE
22#define CSV_ARENA_BLOCK_SIZE (1 << 20)
27#define MAX_FIELD_SIZE 1024
31#if MAX_FIELD_SIZE > 4096
32#error "MAX_FIELD_SIZE is too large for stack allocation. Please reduce it to 4096 or less."
59typedef void (*CsvRowCallback)(
size_t row_index,
Row* row);
125struct CsvReaderConfig {
133struct CsvWriterConfig {
144typedef struct CsvReaderConfig CsvReaderConfig;
145typedef struct CsvWriterConfig CsvWriterConfig;
147void csv_reader_setconfig(
CsvReader* reader, CsvReaderConfig config);
148CsvReaderConfig csv_reader_getconfig(
CsvReader* reader);
166#define CsvWriterConfigure(writer, ...) \
167 csvwriter_setconfig(writer, (CsvWriterConfig){.delim = ',', \
170 .quote_all = false, \
172 .first_row = false, \
175// Create a new CSV writer associated with a filename.
176CsvWriter* csvwriter_new(const char* filename);
178// Set the configuration for the CSV writer.
179bool csvwriter_write_row(CsvWriter* writer, const char** fields, size_t numfields);
181// Free memory used by the CsvWriter and close the file stream.
182void csvwriter_free(CsvWriter* writer);
188#endif /* __CSV_PARSER_H__ */
size_t csv_reader_numrows(const CsvReader *reader)
Get the number of rows in the CSV data.
void csv_reader_free(CsvReader *reader)
Free memory used by the CsvReader and CsvRow structures.
struct CsvReader CsvReader
Opaque structure representing a CSV parser. Create a new CSV parser with csv_reader_new and free it w...
Row ** csv_reader_parse(CsvReader *reader)
Parse the CSV data and retrieve all the rows at once.
CsvReader * csv_reader_new(const char *filename, size_t arena_memory)
Create a new CSV reader associated with a filename.
void csv_reader_parse_async(CsvReader *reader, CsvRowCallback callback, size_t alloc_max)
Parse the CSV data and pass each processed row back in a callback. Return true from the callback to s...
struct CsvWriter CsvWriter
Structure representing a CSV row.
size_t count
Number of fields in each row.
char ** fields
Array of fields in each row.