autodetect iterate: lrec writers

This commit is contained in:
John Kerl 2017-01-28 14:03:34 -05:00
parent 565a9126fc
commit eaca4e0466
2 changed files with 17 additions and 5 deletions

View file

@ -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) {

View file

@ -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