autodetect iterate: default-auto per format

This commit is contained in:
John Kerl 2017-01-31 22:57:58 -05:00
parent da63dac8ac
commit 62b3f7b3ee
4 changed files with 25 additions and 11 deletions

View file

@ -370,11 +370,12 @@ static lhmsll_t* singleton_default_repeat_ipses = NULL;
static lhmss_t* get_default_rses() {
if (singleton_default_rses == NULL) {
// xxx
singleton_default_rses = lhmss_alloc();
lhmss_put(singleton_default_rses, "dkvp", "\n", NO_FREE);
// xxx to do
// lhmss_put(singleton_default_rses, "dkvp", "\n", NO_FREE);
lhmss_put(singleton_default_rses, "json", "\n", NO_FREE);
lhmss_put(singleton_default_rses, "nidx", "\n", NO_FREE);
lhmss_put(singleton_default_rses, "csv", "\r\n", NO_FREE);
@ -390,8 +391,7 @@ static lhmss_t* get_default_rses() {
lhmss_put(singleton_default_rses, "pprint", "\n", NO_FREE);
lhmss_put(singleton_default_rses, "xtab", "(N/A)", NO_FREE);
// singleton_default_rses = lhmss_alloc();
// lhmss_put(singleton_default_rses, "dkvp", "auto", NO_FREE);
lhmss_put(singleton_default_rses, "dkvp", "auto", NO_FREE);
// lhmss_put(singleton_default_rses, "json", "auto", NO_FREE);
// lhmss_put(singleton_default_rses, "nidx", "auto", NO_FREE);
// lhmss_put(singleton_default_rses, "csv", "auto", NO_FREE);

View file

@ -809,7 +809,13 @@ rval_evaluator_t* rval_evaluator_alloc_from_IFS() {
// ----------------------------------------------------------------
mv_t rval_evaluator_IRS_func(void* pvstate, variables_t* pvars) {
return mv_from_string_no_free(pvars->pctx->irs);
//xxx temp return mv_from_string_no_free(pvars->pctx->irs);
context_t* pctx = pvars->pctx;
return mv_from_string_no_free(
pctx->auto_line_term_detected
? pctx->auto_line_term
: pctx->irs
);
}
static void rval_evaluator_IRS_free(rval_evaluator_t* pevaluator) {
free(pevaluator);
@ -854,7 +860,14 @@ rval_evaluator_t* rval_evaluator_alloc_from_OFS() {
// ----------------------------------------------------------------
mv_t rval_evaluator_ORS_func(void* pvstate, variables_t* pvars) {
return mv_from_string_no_free(pvars->pctx->ors);
// xxx auto line term ...
//return mv_from_string_no_free(pvars->pctx->ors);
context_t* pctx = pvars->pctx;
return mv_from_string_no_free(
pctx->auto_line_term_detected
? pctx->auto_line_term
: pctx->ors
);
}
static void rval_evaluator_ORS_free(rval_evaluator_t* pevaluator) {
free(pevaluator);

View file

@ -37,7 +37,8 @@ int main(int argc, char** argv) {
.ops = popts->writer_opts.ops,
.ofs = popts->writer_opts.ofs,
.ors = popts->writer_opts.ors,
.auto_line_term = popts->reader_opts.irs,
.auto_line_term = "\n", // xxx Windows default "\r\n"; libify
.auto_line_term_detected = FALSE,
};
int ok = do_stream_chained(prepipe, filenames, plrec_reader, pmapper_list, plrec_writer, &ctx, popts);

View file

@ -22,11 +22,11 @@ lrec_writer_t* lrec_writer_dkvp_alloc(char* ors, char* ofs, char* ops) {
pstate->ofs = ofs;
pstate->ops = ops;
plrec_writer->pvstate = (void*)pstate;
plrec_writer->pvstate = (void*)pstate;
plrec_writer->pprocess_func = streq(ors, "auto")
? lrec_writer_dkvp_process_auto_ors
: lrec_writer_dkvp_process_nonauto_ors;
plrec_writer->pfree_func = lrec_writer_dkvp_free;
plrec_writer->pfree_func = lrec_writer_dkvp_free;
return plrec_writer;
}