X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fsave-translate.c;h=a565f4471c3aeef45f34db40c44641b34a620ec9;hb=142f8f8814423f76523825f8df060e2fa9d2a2b6;hp=26941329f35ad378426ad441654031e9ab586791;hpb=e441137bbe19f41edbc87dd51ecd2a8e4396cf6d;p=pspp diff --git a/src/language/data-io/save-translate.c b/src/language/data-io/save-translate.c index 26941329f3..a565f4471c 100644 --- a/src/language/data-io/save-translate.c +++ b/src/language/data-io/save-translate.c @@ -33,7 +33,6 @@ #include "language/lexer/lexer.h" #include "libpspp/message.h" -#include "xalloc.h" #include "gettext.h" #define _(msgid) gettext (msgid) @@ -50,8 +49,6 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) struct casewriter *writer; struct file_handle *handle; - struct csv_writer_options csv_opts; - bool replace; bool retain_unselected; @@ -68,6 +65,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) type = 0; dict = dict_clone (dataset_dict (ds)); + dict_set_names_must_be_ids (dict, false); stage = NULL; map = NULL; @@ -79,7 +77,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) include_var_names = false; use_value_labels = false; use_print_formats = false; - decimal = settings_get_decimal_char (FMT_F); + decimal = settings_get_fmt_settings ()->decimal; delimiter = 0; qualifier = '"'; @@ -120,7 +118,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) type = TAB_FILE; else { - lex_error_expecting (lexer, "CSV", "TAB", NULL_SENTINEL); + lex_error_expecting (lexer, "CSV", "TAB"); goto error; } } @@ -137,7 +135,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) recode_user_missing = true; else { - lex_error_expecting (lexer, "IGNORE", "RECODE", NULL_SENTINEL); + lex_error_expecting (lexer, "IGNORE", "RECODE"); goto error; } } @@ -150,7 +148,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) use_value_labels = true; else { - lex_error_expecting (lexer, "VALUES", "LABELS", NULL_SENTINEL); + lex_error_expecting (lexer, "VALUES", "LABELS"); goto error; } } @@ -198,8 +196,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) decimal = ','; else { - lex_error_expecting (lexer, "DOT", "COMMA", - NULL_SENTINEL); + lex_error_expecting (lexer, "DOT", "COMMA"); goto error; } } @@ -212,8 +209,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) use_print_formats = true; else { - lex_error_expecting (lexer, "PLAIN", "VARIABLE", - NULL_SENTINEL); + lex_error_expecting (lexer, "PLAIN", "VARIABLE"); goto error; } } @@ -230,11 +226,11 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) retain_unselected = false; else { - lex_error_expecting (lexer, "RETAIN", "DELETE", NULL_SENTINEL); + lex_error_expecting (lexer, "RETAIN", "DELETE"); goto error; } } - else if (!parse_dict_trim (lexer, dict)) + else if (!parse_dict_trim (lexer, dict, true)) goto error; } @@ -258,17 +254,18 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) dict_delete_scratch_vars (dict); dict_compact_values (dict); - csv_opts.recode_user_missing = recode_user_missing; - csv_opts.include_var_names = include_var_names; - csv_opts.use_value_labels = use_value_labels; - csv_opts.use_print_formats = use_print_formats; - csv_opts.decimal = decimal; - csv_opts.delimiter = (delimiter ? delimiter - : type == TAB_FILE ? '\t' - : decimal == '.' ? ',' - : ';'); - csv_opts.qualifier = qualifier; - + struct csv_writer_options csv_opts = { + .recode_user_missing = recode_user_missing, + .include_var_names = include_var_names, + .use_value_labels = use_value_labels, + .use_print_formats = use_print_formats, + .decimal = decimal, + .delimiter = (delimiter ? delimiter + : type == TAB_FILE ? '\t' + : decimal == '.' ? ',' + : ';'), + .qualifier = qualifier, + }; writer = csv_writer_open (handle, dict, &csv_opts); if (writer == NULL) goto error; @@ -278,7 +275,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) case_map_stage_destroy (stage); if (map != NULL) writer = case_map_create_output_translator (map, writer); - dict_destroy (dict); + dict_unref (dict); casereader_transfer (proc_open_filtering (ds, !retain_unselected), writer); ok = casewriter_destroy (writer); @@ -289,7 +286,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds) error: case_map_stage_destroy (stage); fh_unref (handle); - dict_destroy (dict); + dict_unref (dict); case_map_destroy (map); return CMD_FAILURE; }