// ---------------------------------------------------------------- lrec_t* lrec_parse_stdio_nidx(char* line, char ifs, int allow_repeat_ifs) { lrec_t* prec = lrec_nidx_alloc(line); int idx = 0; char* key = NULL; char* value = line; char free_flags = 0; for (char* p = line; *p; ) { if (*p == ifs) { *p = 0; idx++; key = make_nidx_key(idx, &free_flags); lrec_put(prec, key, value, free_flags); p++; if (allow_repeat_ifs) { while (*p == ifs) p++; } value = p; } else { p++; } } idx++; key = make_nidx_key(idx, &free_flags); lrec_put(prec, key, value, free_flags); return prec; }
// ---------------------------------------------------------------- lrec_t* lrec_parse_stdio_nidx_multi_sep(char* line, char* ifs, int ifslen, int allow_repeat_ifs) { lrec_t* prec = lrec_nidx_alloc(line); int idx = 0; char free_flags = 0; char* p = line; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } char* key = NULL; char* value = p; for ( ; *p; ) { if (streqn(p, ifs, ifslen)) { *p = 0; idx++; key = make_nidx_key(idx, &free_flags); lrec_put(prec, key, value, free_flags); p += ifslen; if (allow_repeat_ifs) { while (streqn(p, ifs, ifslen)) p += ifslen; } value = p; } else { p++; } } idx++; if (allow_repeat_ifs && *value == 0) { ; // OK } else { key = make_nidx_key(idx, &free_flags); lrec_put(prec, key, value, free_flags); } return prec; }