From eaca4e04663ba3a9a9de797bab523309a415113e Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sat, 28 Jan 2017 14:03:34 -0500 Subject: [PATCH] autodetect iterate: lrec writers --- c/output/lrec_writer_csv.c | 20 ++++++++++++++++---- c/todo.txt | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/c/output/lrec_writer_csv.c b/c/output/lrec_writer_csv.c index 2440b4f8a..0c54b26c8 100644 --- a/c/output/lrec_writer_csv.c +++ b/c/output/lrec_writer_csv.c @@ -26,7 +26,9 @@ typedef struct _lrec_writer_csv_state_t { } lrec_writer_csv_state_t; // ---------------------------------------------------------------- -static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); +static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors); +static void lrec_writer_csv_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); +static void lrec_writer_csv_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx); static void lrec_writer_csv_free(lrec_writer_t* pwriter, context_t* pctx); // ---------------------------------------------------------------- @@ -55,7 +57,9 @@ lrec_writer_t* lrec_writer_csv_alloc(char* ors, char* ofs, quoting_t oquoting, i pstate->plast_header_output = NULL; plrec_writer->pvstate = (void*)pstate; - plrec_writer->pprocess_func = lrec_writer_csv_process; + plrec_writer->pprocess_func = streq(ors, "auto") + ? lrec_writer_csv_process_auto_ors + : lrec_writer_csv_process_nonauto_ors; plrec_writer->pfree_func = lrec_writer_csv_free; return plrec_writer; @@ -69,11 +73,19 @@ static void lrec_writer_csv_free(lrec_writer_t* pwriter, context_t* pctx) { } // ---------------------------------------------------------------- -static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { +static void lrec_writer_csv_process_auto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { + lrec_writer_csv_process(pvstate, output_stream, prec, pctx->auto_irs); +} + +static void lrec_writer_csv_process_nonauto_ors(void* pvstate, FILE* output_stream, lrec_t* prec, context_t* pctx) { + lrec_writer_csv_state_t* pstate = pvstate; + lrec_writer_csv_process(pvstate, output_stream, prec, pstate->ors); +} + +static void lrec_writer_csv_process(void* pvstate, FILE* output_stream, lrec_t* prec, char* ors) { if (prec == NULL) return; lrec_writer_csv_state_t* pstate = pvstate; - char *ors = pstate->ors; char *ofs = pstate->ofs; if (pstate->plast_header_output != NULL) { diff --git a/c/todo.txt b/c/todo.txt index 9d3e32f25..48ef476b8 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -61,8 +61,8 @@ AUTOTERM - writer API needs pctx - use pctx->autoirs on first record emitted - ? output/lrec_writer_csv.c ? output/lrec_writer_json.c + k output/lrec_writer_csv.c k output/lrec_writer_csvlite.c k output/lrec_writer_dkvp.c k output/lrec_writer_markdown.c