From: Ben Pfaff Date: Fri, 6 Mar 2015 05:27:56 +0000 (-0800) Subject: RENAME VARIABLES: Make parentheses optional for single variables. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b566340090412cef7df415da9796516c882469b9;p=pspp RENAME VARIABLES: Make parentheses optional for single variables. This matches SPSS documented behavior. Reported by Tom Smekens. --- diff --git a/doc/variables.texi b/doc/variables.texi index 1db8f034a6..00a02be613 100644 --- a/doc/variables.texi +++ b/doc/variables.texi @@ -434,6 +434,8 @@ variable names, separated by an equals sign (@samp{=}), within parentheses. There must be the same number of old and new variable names. Each old variable is renamed to the corresponding new variable name. Multiple parenthesized groups of variables may be specified. +When the old and new variable names contain only a single variable name, +the parentheses are optional. @cmd{RENAME VARIABLES} takes effect immediately. It does not cause the data to be read. diff --git a/src/language/dictionary/rename-variables.c b/src/language/dictionary/rename-variables.c index f7cd9c1a61..7c3f8bdf99 100644 --- a/src/language/dictionary/rename-variables.c +++ b/src/language/dictionary/rename-variables.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2010, 2011, 2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -52,32 +52,32 @@ cmd_rename_variables (struct lexer *lexer, struct dataset *ds) { size_t prev_nv_1 = rename_cnt; size_t prev_nv_2 = rename_cnt; + int opts = PV_APPEND | PV_NO_DUPLICATE; - if (!lex_force_match (lexer, T_LPAREN)) + if (!lex_match (lexer, T_LPAREN)) + opts |= PV_SINGLE; + if (!parse_variables (lexer, dataset_dict (ds), + &rename_vars, &rename_cnt, opts)) goto lossage; - if (!parse_variables (lexer, dataset_dict (ds), &rename_vars, &rename_cnt, - PV_APPEND | PV_NO_DUPLICATE)) - goto lossage; if (!lex_force_match (lexer, T_EQUALS)) goto lossage; if (!parse_DATA_LIST_vars (lexer, dataset_dict (ds), - &rename_new_names, &prev_nv_1, - PV_APPEND | PV_NO_DUPLICATE)) - goto lossage; + &rename_new_names, &prev_nv_1, opts)) + goto lossage; if (prev_nv_1 != rename_cnt) - { + { size_t i; - msg (SE, _("Differing number of variables in old name list " + msg (SE, _("Differing number of variables in old name list " "(%zu) and in new name list (%zu)."), - rename_cnt - prev_nv_2, prev_nv_1 - prev_nv_2); - for (i = 0; i < prev_nv_1; i++) - free (rename_new_names[i]); - free (rename_new_names); - rename_new_names = NULL; - goto lossage; - } - if (!lex_force_match (lexer, T_RPAREN)) + rename_cnt - prev_nv_2, prev_nv_1 - prev_nv_2); + for (i = 0; i < prev_nv_1; i++) + free (rename_new_names[i]); + free (rename_new_names); + rename_new_names = NULL; + goto lossage; + } + if (!(opts & PV_SINGLE) && !lex_force_match (lexer, T_RPAREN)) goto lossage; } while (lex_token (lexer) != T_ENDCMD); diff --git a/tests/language/dictionary/rename-variables.at b/tests/language/dictionary/rename-variables.at index d0f7632c54..f528dcb046 100644 --- a/tests/language/dictionary/rename-variables.at +++ b/tests/language/dictionary/rename-variables.at @@ -2,17 +2,18 @@ AT_BANNER([RENAME VARIABLES]) AT_SETUP([RENAME VARIABLES]) AT_DATA([rename-variables.sps], [dnl -DATA LIST LIST /brakeFluid * y * . +DATA LIST LIST /brakeFluid y auxiliary warp (F2.0). BEGIN DATA. -1 3 -2 3 -3 3 -4 3 +1 3 5 9 +2 3 6 10 +3 3 7 11 +4 3 8 11 END DATA. LIST. -RENAME VARIABLES (brakeFluid=applecarts). +RENAME VARIABLES brakeFluid=applecarts y=bananamobiles. +RENAME VARIABLES (warp auxiliary=foobar xyzzy). LIST. @@ -22,22 +23,44 @@ AT_CHECK([pspp -o pspp.csv rename-variables.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Table: Reading free-form data from INLINE. Variable,Format -brakeFluid,F8.0 -y,F8.0 +brakeFluid,F2.0 +y,F2.0 +auxiliary,F2.0 +warp,F2.0 Table: Data List -brakeFluid,y -1.00,3.00 -2.00,3.00 -3.00,3.00 -4.00,3.00 +brakeFluid,y,auxiliary,warp +1,3,5,9 +2,3,6,10 +3,3,7,11 +4,3,8,11 Table: Data List -applecarts,y -1.00,3.00 -2.00,3.00 -3.00,3.00 -4.00,3.00 +applecarts,bananamobiles,xyzzy,foobar +1,3,5,9 +2,3,6,10 +3,3,7,11 +4,3,8,11 ]) AT_CHECK([grep '[bB][rR][aA][kK][eE]' rename.sav], [1], [ignore-nolog]) AT_CLEANUP + +AT_SETUP([RENAME VARIABLES -- invalid syntax 1]) +AT_DATA([rename-variables.sps], [dnl +DATA LIST LIST /brakeFluid y auxiliary warp (F2.0). +RENAME VARIABLES warp auxiliary=foobar xyzzy. +]) +AT_CHECK([pspp -o pspp.csv rename-variables.sps], [1], [dnl +rename-variables.sps:2.23-2.31: error: RENAME VARIABLES: Syntax error at `auxiliary': expecting `='. +]) +AT_CLEANUP + +AT_SETUP([RENAME VARIABLES -- invalid syntax 2]) +AT_DATA([rename-variables.sps], [dnl +DATA LIST LIST /brakeFluid y auxiliary warp (F2.0). +RENAME VARIABLES (brakeFluid=applecarts y=bananamobiles). +]) +AT_CHECK([pspp -o pspp.csv rename-variables.sps], [1], [dnl +rename-variables.sps:2: error: RENAME VARIABLES: Differing number of variables in old name list (1) and in new name list (2). +]) +AT_CLEANUP