X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcsv.c;h=c8619a9a7d403ebc84ebc55d9c307976a49b734b;hb=6bfb24ba0dd1d0000f69ce7f7de122629827a161;hp=3fbf53d963448b041d403c81f2e4cd13fe6ad227;hpb=08af9f724ce00f0ab6bdbbfc61d6a3e624f2c012;p=pspp diff --git a/src/output/csv.c b/src/output/csv.c index 3fbf53d963..c8619a9a7d 100644 --- a/src/output/csv.c +++ b/src/output/csv.c @@ -44,7 +44,10 @@ struct csv_driver struct output_driver driver; char *separator; /* Field separator (usually comma or tab). */ + int quote; /* Quote character (usually ' or ") or 0. */ char *quote_set; /* Characters that force quoting. */ + bool captions; /* Print table captions? */ + char *file_name; /* Output file name. */ char *command_name; /* Current command. */ FILE *file; /* Output file. */ @@ -73,13 +76,18 @@ csv_create (const char *file_name, enum settings_output_devices device_type, { struct output_driver *d; struct csv_driver *csv; + char *quote; csv = xzalloc (sizeof *csv); d = &csv->driver; output_driver_init (&csv->driver, &csv_driver_class, file_name, device_type); csv->separator = parse_string (opt (d, o, "separator", ",")); - csv->quote_set = xasprintf ("\"\n\r\t%s", csv->separator); + quote = parse_string (opt (d, o, "quote", "\"")); + csv->quote = quote[0]; + free (quote); + csv->quote_set = xasprintf ("\n\r\t%s%c", csv->separator, csv->quote); + csv->captions = parse_boolean (opt (d, o, "captions", "true")); csv->file_name = xstrdup (file_name); csv->file = fn_open (csv->file_name, "w"); csv->n_items = 0; @@ -122,18 +130,18 @@ csv_output_field (struct csv_driver *csv, const char *field) while (*field == ' ') field++; - if (field[strcspn (field, csv->quote_set)]) + if (csv->quote && field[strcspn (field, csv->quote_set)]) { const char *p; - putc ('"', csv->file); + putc (csv->quote, csv->file); for (p = field; *p != '\0'; p++) { - if (*p == '"') - putc ('"', csv->file); + if (*p == csv->quote) + putc (csv->quote, csv->file); putc (*p, csv->file); } - putc ('"', csv->file); + putc (csv->quote, csv->file); } else fputs (field, csv->file); @@ -181,7 +189,7 @@ csv_submit (struct output_driver *driver, csv_put_separator (csv); - if (caption != NULL) + if (csv->captions && caption != NULL) { csv_output_field_format (csv, "Table: %s", caption); putc ('\n', csv->file);