Assorted improvements to diagnostics.
[pspp] / tests / language / data-io / save-translate.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([SAVE TRANSLATE /TYPE=CSV])
18
19 m4_define([PREPARE_SAVE_TRANSLATE_CSV], [dnl
20 AT_KEYWORDS([SAVE TRANSLATE])
21 AT_DATA([data.txt], [dnl
22 0 '1 9:30:05' 1/2/2003 "25/8/1995 15:30:00" "'a,b,c'",0
23 , '-0 5:17' 10/31/2010 "9/4/2008 9:29:00" " xxx ",1
24 1.625,'0 12:00',,,xyzzy,1
25 ])
26 AT_DATA([save-translate.pspp], [dnl
27 SET DECIMAL=DOT.
28 DATA LIST LIST NOTABLE FILE="data.txt"
29     /number(F8.3) time(DTIME10) date(ADATE10) datetime(DATETIME20) string(A8)
30      filter(F1.0).
31 MISSING VALUES number(0) time('0 12:00') string('xyzzy').
32 FILTER BY filter.
33 SAVE TRANSLATE /OUTFILE="data.csv" /TYPE=m4_if([$2], [], [CSV], [$2])
34     $1.
35 ])
36 AT_CHECK([pspp -O format=csv save-translate.pspp], [0])
37 ])
38
39 AT_SETUP([CSV output -- defaults])
40 PREPARE_SAVE_TRANSLATE_CSV
41 AT_CHECK([cat data.csv], [0], [dnl
42 0,33:30:05,01/02/2003,08/25/1995 15:30:00,"'a,b,c'",0
43  ,-05:17:00,10/31/2010,04/09/2008 09:29:00, xxx,1
44 1.625,12:00:00, , ,xyzzy,1
45 ])
46 AT_CLEANUP
47
48 AT_SETUP([CSV output -- recode missing, delete unselected])
49 PREPARE_SAVE_TRANSLATE_CSV([/MISSING=RECODE /UNSELECTED=DELETE])
50 AT_CHECK([cat data.csv], [0], [dnl
51  ,-05:17:00,10/31/2010,04/09/2008 09:29:00, xxx,1
52 1.625, , , ,,1
53 ])
54 AT_CLEANUP
55
56 AT_SETUP([CSV output -- var names, formats])
57 PREPARE_SAVE_TRANSLATE_CSV(
58   [/FIELDNAMES /TEXTOPTIONS FORMAT=VARIABLE /UNSELECTED=RETAIN])
59 AT_CHECK([cat data.csv], [0], [dnl
60 number,time,date,datetime,string,filter
61 .000,1 09:30:05,01/02/2003,25-AUG-1995 15:30:00,"'a,b,c'",0
62  ,-0 05:17,10/31/2010,09-APR-2008 09:29:00, xxx,1
63 1.625,0 12:00:00, , ,xyzzy,1
64 ])
65 AT_CLEANUP
66
67 AT_SETUP([CSV output -- comma as decimal point])
68 PREPARE_SAVE_TRANSLATE_CSV([/FIELDNAMES /TEXTOPTIONS DECIMAL=COMMA])
69 AT_CHECK([cat data.csv], [0], [dnl
70 number;time;date;datetime;string;filter
71 0;33:30:05;01/02/2003;08/25/1995 15:30:00;'a,b,c';0
72  ;-05:17:00;10/31/2010;04/09/2008 09:29:00; xxx;1
73 1,625;12:00:00; ; ;xyzzy;1
74 ])
75 AT_CLEANUP
76
77 AT_SETUP([CSV output -- custom delimiter, qualifier])
78 PREPARE_SAVE_TRANSLATE_CSV(
79   [/FIELDNAMES /TEXTOPTIONS DELIMITER=':' QUALIFIER="'"])
80 AT_CHECK([cat data.csv], [0], [dnl
81 number:time:date:datetime:string:filter
82 0:'33:30:05':01/02/2003:'08/25/1995 15:30:00':'''a,b,c''':0
83  :'-05:17:00':10/31/2010:'04/09/2008 09:29:00': xxx:1
84 1.625:'12:00:00': : :xyzzy:1
85 ])
86 AT_CLEANUP
87
88 AT_SETUP([CSV output -- KEEP, RENAME quoted])
89 PREPARE_SAVE_TRANSLATE_CSV(
90   [/FIELDNAMES /KEEP=time string /RENAME string='long name with spaces' /UNSELECTED=DELETE])
91 AT_CHECK([cat data.csv], [0], [dnl
92 time,long name with spaces
93 -05:17:00, xxx
94 12:00:00,xyzzy
95 ])
96 AT_CLEANUP
97
98
99 AT_SETUP([CSV output -- KEEP, RENAME multi quoted])
100 PREPARE_SAVE_TRANSLATE_CSV(
101   [/FIELDNAMES
102   /RENAME =
103         number = "this one"
104         time = "that one"
105         date = "which one?"
106         datetime = "another variable replacement"
107         string="long name with spaces"
108   /UNSELECTED=DELETE])
109 AT_CHECK([cat data.csv], [0], [dnl
110 this one,that one,which one?,another variable replacement,long name with spaces,filter
111  ,-05:17:00,10/31/2010,04/09/2008 09:29:00, xxx,1
112 1.625,12:00:00, , ,xyzzy,1
113 ])
114 AT_CLEANUP
115
116
117 AT_SETUP([CSV output -- KEEP, RENAME bad name ])
118 AT_DATA([bad.sps], [
119 data list notable list /Var1 Var2 Var3 Var4 Var5 *.
120 begin data
121 1 2 3 4 5
122 end data.
123
124 SAVE TRANSLATE
125 /OUTFILE="foo.csv"
126   /TYPE=CSV
127   /MAP
128   /REPLACE
129   /FIELDNAMES
130   /Unselected=DELETE
131    /RENAME =
132         Var4 = foobar
133         (Var1 Var2 = one Var3 )
134         (Var3 = "The second")
135   /CELLS=VALUES
136 .
137 ])
138
139 AT_CHECK([pspp -O format=csv bad.sps], [1], [dnl
140 "bad.sps:16.26-16.29: error: SAVE TRANSLATE: Cannot rename Var2 as Var3 because a variable named Var3 already exists.
141    16 |         (Var1 Var2 = one Var3 )
142       |                          ^~~~"
143
144 "bad.sps:16: note: SAVE TRANSLATE: To rename variables with overlapping names, use a single RENAME subcommand such as `/RENAME (A=B)(B=C)(C=A)', or equivalently, `/RENAME (A B C=B C A)'."
145 ])
146
147
148 AT_CLEANUP
149
150
151
152 AT_BANNER([SAVE TRANSLATE /TYPE=TAB])
153
154 AT_SETUP([TAB output])
155 PREPARE_SAVE_TRANSLATE_CSV([/FIELDNAMES], [TAB])
156 AT_CHECK([cat data.csv], [0], [dnl
157 number  time    date    datetime        string  filter
158 0       33:30:05        01/02/2003      08/25/1995 15:30:00     'a,b,c' 0
159         -05:17:00       10/31/2010      04/09/2008 09:29:00      xxx    1
160 1.625   12:00:00                        xyzzy   1
161 ])
162 AT_CLEANUP
163