X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=recctrl%2Fcsvread.c;h=6e2b0640e3cd98665509617493d36c65be24b7e1;hb=ecb3935e78cd9bcfdebafdee0834cfb1060d7b5e;hp=0703d42e52a88e4f11e47658e53af9edc3a80f99;hpb=acb63831cbd1595325151f0829b8dc9ae3eb8fbe;p=idzebra-moved-to-github.git diff --git a/recctrl/csvread.c b/recctrl/csvread.c index 0703d42..6e2b064 100644 --- a/recctrl/csvread.c +++ b/recctrl/csvread.c @@ -1,4 +1,4 @@ -/* $Id: csvread.c,v 1.1 2005-12-05 12:18:41 marc Exp $ +/* $Id: csvread.c,v 1.5 2006-05-10 08:13:28 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -46,7 +46,7 @@ struct csv_getc_info { }; */ -static struct csv_t { +struct csv_t { NMEM nmem; int buf_size; char *buf; @@ -66,7 +66,7 @@ static struct csv_t { }; -static void grs_config_csv(void *clientData, Res res, const char *args) +static ZEBRA_RES grs_config_csv(void *clientData, Res res, const char *args) { int i; struct csv_t *csvp = (struct csv_t*) clientData; @@ -91,8 +91,8 @@ static void grs_config_csv(void *clientData, Res res, const char *args) /* csvp->field_names = 0; */ /*nmem_strdup(csvp->nmem, "a|b|c|d|e");*/ csvp->field_name - = nmem_malloc(csvp->nmem, - sizeof(*(csvp->field_name)) * csvp->max_nr_fields); + = nmem_malloc(csvp->nmem, + sizeof(*(csvp->field_name)) * csvp->max_nr_fields); for (i = 0; i < csvp->max_nr_fields; i++){ csvp->field_name[i] = 0; } @@ -103,6 +103,7 @@ static void grs_config_csv(void *clientData, Res res, const char *args) */ yaz_log (YLOG_LOG, "Ended CSV filter grs_config_csv"); + return ZEBRA_OK; } @@ -180,11 +181,14 @@ static data1_node *grs_read_csv (struct grs_read_info *gri) if (read_header){ /* read field names from header line */ if (csvp->nr_fields < csvp->max_nr_fields){ + csvp->field_name[csvp->nr_fields] + = nmem_strdup(csvp->nmem, csvp->value); + csvp->nr_fields++; - yaz_log (YLOG_LOG, "CSV filter grs_read_csv header %d %s", + yaz_log (YLOG_LOG, "CSV filter grs_read_csv field %d name '%s'", field_nr, csvp->value); } else { - yaz_log (YLOG_WARN, "CSV filter grs_read_csv header %d %s " + yaz_log (YLOG_WARN, "CSV filter grs_read_csv field %d name '%s' " "exceeds configured max number of fields %d", field_nr, csvp->value, csvp->max_nr_fields); } @@ -192,21 +196,23 @@ static data1_node *grs_read_csv (struct grs_read_info *gri) /* process following value line fields */ if (field_nr < csvp->nr_fields){ /* less or qual fields number */ - yaz_log (YLOG_LOG, "CSV filter grs_read_csv value %d %s", - field_nr, csvp->value); + yaz_log (YLOG_LOG, "CSV filter grs_read_csv field %d %s: '%s'", + field_nr, csvp->field_name[field_nr], csvp->value); } else { /* too many fields */ - yaz_log (YLOG_WARN, "CSV filter grs_read_csv value %d %s " + yaz_log (YLOG_WARN, "CSV filter grs_read_csv field value %d %s " "exceeds dynamic configured number of fields %d", field_nr, csvp->value, csvp->nr_fields); } } + /* advance buffer and proceed to next field */ cb++; cv = csvp->value; field_nr++; } else if (*cb == csvp->record_char){ /* if record finished */ + /* advance buffer and proceed to record */ *cv = '\0'; cb++; cv = csvp->value; @@ -219,7 +225,7 @@ static data1_node *grs_read_csv (struct grs_read_info *gri) yaz_log (YLOG_LOG, "CSV filter grs_read_csv record end"); } } else { - /* just plain char to be stored in value */ + /* just plain char to be stored in value, no special action at all */ if (csvp->lower_case && read_header){ *cv = tolower(*cb); } else { @@ -236,12 +242,12 @@ static data1_node *grs_read_csv (struct grs_read_info *gri) } /* try to build GRS node and document */ - /* - root_node = data1_mk_root(gri->dh, gri->mem, cvsp->root_name); + + root_node = data1_mk_root(gri->dh, gri->mem, csvp->root_element); node = data1_mk_node2(gri->dh, gri->mem, DATA1N_data, root_node); node = data1_mk_tag(gri->dh, gri->mem, "pr_name_gn", 0, node); data1_mk_text_n(gri->dh, gri->mem, csvp->buf, read_bytes, node); - */ + if (!root_node){ yaz_log (YLOG_WARN, "empty CSV record of type '%s' " "near file offset %d " @@ -256,9 +262,9 @@ static data1_node *grs_read_csv (struct grs_read_info *gri) static void *grs_init_csv(Res res, RecType recType) { - yaz_log (YLOG_LOG, "Called CSV filter grs_init_csv"); NMEM m = nmem_create(); struct csv_t *csvp = (struct csv_t *) nmem_malloc(m, sizeof(*csvp)); + yaz_log (YLOG_LOG, "Called CSV filter grs_init_csv"); csvp->nmem = m; yaz_log (YLOG_LOG, "Ended CSV filter grs_init_csv"); return csvp; @@ -328,3 +334,11 @@ idzebra_filter &grs_type_csv, 0, }; +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +