From 293d0658260be13274d3d74b3596883528e40f28 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 29 Dec 2019 07:50:47 +0000 Subject: [PATCH] pspp-convert: Add --labels and --recode options. Requested by Dave Trollope . --- NEWS | 8 ++++++-- doc/pspp-convert.texi | 11 +++++++++++ utilities/pspp-convert.1 | 11 +++++++++++ utilities/pspp-convert.c | 18 ++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 9aeaca95ea..8bbecdf01d 100644 --- a/NEWS +++ b/NEWS @@ -26,8 +26,12 @@ Changes from 1.2.0 to 1.3.0: * Plain text output is no longer divided into pages, since it is now rarely printed on paper. - * The pspp-convert utility has new "-a", "-l", "--password-list" - options to search for an encrypted file's password. + * pspp-convert improvements: + + - New "-a", "-l", "--password-list" options to search for an + encrypted file's password. + + - New "--labels" and "--recode" options for CSV output. * Improvements to SAVE DATA COLLECTION support for MDD files. diff --git a/doc/pspp-convert.texi b/doc/pspp-convert.texi index c84d556d8e..92e15b3cc2 100644 --- a/doc/pspp-convert.texi +++ b/doc/pspp-convert.texi @@ -95,6 +95,17 @@ Overrides the encoding in which character strings in @var{input} are interpreted. This option is necessary because old SPSS system files, and SPSS/PC+ system files, do not self-identify their encoding. +@item --labels +By default, @command{pspp-convert} writes variables' values to CVS +output files. With this option, @command{pspp-convert} writes value +labels. + +@item --recode +By default, @command{pspp-convert} writes user-missing values to CVS +output files as their regular values. With this option, +@command{pspp-convert} recodes them to system-missing values (which +are written as a single space). + @item -p @var{password} @item --password=@var{password} Specifies the password to use to decrypt an encrypted SPSS system file diff --git a/utilities/pspp-convert.1 b/utilities/pspp-convert.1 index 86530ec76c..c568e3c0fc 100644 --- a/utilities/pspp-convert.1 +++ b/utilities/pspp-convert.1 @@ -81,6 +81,17 @@ Overrides the encoding in which character strings in \fIinput\fR are interpreted. This option is necessary because old SPSS system files do not self-identify their encoding. . +.SS "CSV Output Options" +.PP +These options affect only output to \fB.csv\fR and \fB.txt\fR files. +.IP "\fB\-\-labels\fR" +By default, \fBpspp\-convert\fR writes variables' values to the output. +With this option, \fBpspp\-convert\fR writes value labels. +.IP "\fB\-\-recode\fR" +By default, \fBpspp\-convert\fR writes user-missing values as their +regular values. With this option, \fBpspp\-convert\fR recodes them to +system-missing values (which are written as a single space). +. .SS "Password Options" When the input file is encrypted, \fBpspp\-convert\fR needs to obtain a password to decrypt it. To do so, the user may specify the password diff --git a/utilities/pspp-convert.c b/utilities/pspp-convert.c index bb04abbfb2..f7504c2bd8 100644 --- a/utilities/pspp-convert.c +++ b/utilities/pspp-convert.c @@ -75,6 +75,9 @@ main (int argc, char *argv[]) const char *password_list = NULL; int length = 0; + bool recode_user_missing = false; + bool use_value_labels = false; + long long int i; set_program_name (argv[0]); @@ -87,12 +90,17 @@ main (int argc, char *argv[]) enum { OPT_PASSWORD_LIST = UCHAR_MAX + 1, + OPT_LABELS, + OPT_RECODE, }; static const struct option long_options[] = { { "cases", required_argument, NULL, 'c' }, { "encoding", required_argument, NULL, 'e' }, + { "labels", no_argument, NULL, OPT_LABELS }, + { "recode", no_argument, NULL, OPT_RECODE }, + { "password", required_argument, NULL, 'p' }, { "password-alphabet", required_argument, NULL, 'a' }, { "password-length", required_argument, NULL, 'l' }, @@ -133,6 +141,14 @@ main (int argc, char *argv[]) password_list = optarg; break; + case OPT_LABELS: + use_value_labels = true; + break; + + case OPT_RECODE: + recode_user_missing = true; + break; + case 'a': for (const char *p = optarg; *p; ) if (p[1] == '-' && p[2] > p[0]) @@ -202,6 +218,8 @@ main (int argc, char *argv[]) csv_writer_options_init (&options); options.include_var_names = true; + options.use_value_labels = use_value_labels; + options.recode_user_missing = recode_user_missing; writer = csv_writer_open (output_fh, dict, &options); } else if (!strcmp (output_format, "sav") || !strcmp (output_format, "sys")) -- 2.30.2