Sets the character used to separate fields. Default: a comma
(@samp{,}).
+@item -O quote=@var{qualifier}
+Sets @var{qualifier} as the character used to quote fields that
+contain white space, the separator (or any of the characters in the
+separator, if it contains more than one character), or the quote
+character itself. If @var{qualifier} is longer than one character,
+only the first character is used; if @var{qualifier} is the empty
+string, then fields are never quoted.
+
@item -O captions=@var{boolean}
Whether table captions should be printed. Default: @code{on}.
@end table
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? */
{
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");
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);