X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fcsv.c;h=c648bfa79c30ae0e9330f3f7bae60290e1d96210;hb=173d1687aea88e0e5e1b1d8615ed68ebefb15d08;hp=6be9c43acfaf4ded795b3a1a9ac6aa8e881276bd;hpb=f51ecb48027e6b1eb46840ae25888a25b429f012;p=pspp diff --git a/src/output/csv.c b/src/output/csv.c index 6be9c43acf..c648bfa79c 100644 --- a/src/output/csv.c +++ b/src/output/csv.c @@ -19,15 +19,17 @@ #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "data/file-name.h" +#include "libpspp/assertion.h" +#include "libpspp/compiler.h" +#include "libpspp/message.h" +#include "libpspp/string-map.h" +#include "output/text-item.h" +#include "output/driver-provider.h" +#include "output/options.h" +#include "output/message-item.h" +#include "output/table-item.h" +#include "output/table-provider.h" #include "gl/error.h" #include "gl/xalloc.h" @@ -43,6 +45,7 @@ struct csv_driver char *separator; /* Comma or tab. */ char *file_name; /* Output file name. */ + char *command_name; /* Current command. */ FILE *file; /* Output file. */ int n_items; /* Number of items output so far. */ }; @@ -75,13 +78,13 @@ csv_create (const char *file_name, enum settings_output_devices device_type, output_driver_init (&csv->driver, &csv_driver_class, file_name, device_type); csv->separator = parse_string (opt (d, o, "separator", ",")); - csv->file_name = parse_string (opt (d, o, "output-file", "pspp.csv")); + csv->file_name = xstrdup (file_name); csv->file = fn_open (csv->file_name, "w"); csv->n_items = 0; if (csv->file == NULL) { - error (0, errno, _("csv: opening output file \"%s\""), csv->file_name); + error (0, errno, _("error opening output file `%s'"), csv->file_name); output_driver_destroy (d); return NULL; } @@ -164,6 +167,8 @@ csv_submit (struct output_driver *driver, { struct csv_driver *csv = csv_driver_cast (driver); + output_driver_track_current_command (output_item, &csv->command_name); + if (is_table_item (output_item)) { struct table_item *table_item = to_table_item (output_item); @@ -227,6 +232,16 @@ csv_submit (struct output_driver *driver, } putc ('\n', csv->file); } + else if (is_message_item (output_item)) + { + const struct message_item *message_item = to_message_item (output_item); + const struct msg *msg = message_item_get_msg (message_item); + char *s = msg_to_string (msg, csv->command_name); + csv_put_separator (csv); + csv_output_field (csv->file, s); + free (s); + putc ('\n', csv->file); + } } struct output_driver_factory csv_driver_factory = { "csv", csv_create };