DATA LIST: Do not treat the comma as a field separator if DECIMAL=COMMA
[pspp] / tests / language / data-io / data-list.at
1 AT_BANNER([DATA LIST])
2
3 AT_SETUP([DATA LIST LIST with empty fields])
4 AT_DATA([data-list.pspp], [dnl
5 DATA LIST LIST NOTABLE /A B C (F1.0).
6 BEGIN DATA.
7 ,,
8 ,,3
9 ,2,
10 ,2,3
11 1,,
12 1,,3
13 1,2,
14 1,2,3
15 END DATA.
16
17 LIST.
18 ])
19 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
20 Table: Data List
21 A,B,C
22 .,.,.
23 .,.,3
24 .,2,.
25 .,2,3
26 1,.,.
27 1,.,3
28 1,2,.
29 1,2,3
30 ])
31 AT_CLEANUP
32
33
34 AT_SETUP([DATA LIST LIST with explicit delimiters])
35 AT_DATA([data-list.pspp], [dnl
36 data list list ('|','X') /A B C D.
37 begin data.
38 1|23X45|2.03x
39 2X22|34|23|
40 3|34|34X34
41 end data.
42
43 list.
44 ])
45 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
46 Table: Reading free-form data from INLINE.
47 Variable,Format
48 A,F8.0
49 B,F8.0
50 C,F8.0
51 D,F8.0
52
53 data-list.pspp:3.9-3.13: warning: Data for variable D is not valid as format F: Number followed by garbage.
54
55 Table: Data List
56 A,B,C,D
57 1.00,23.00,45.00,.  @&t@
58 2.00,22.00,34.00,23.00
59 3.00,34.00,34.00,34.00
60 ])
61 AT_CLEANUP
62
63 AT_SETUP([DATA LIST FREE with SKIP])
64 AT_DATA([data-list.pspp], [dnl
65 data list free skip=1/A B C D.
66 begin data.
67 # This record is ignored.
68 ,1,2,x
69 ,4,,5
70 6
71 7,
72 8 9
73 0,1 ,,,
74 ,,,,
75 2
76
77 3
78 4
79 5
80 end data.
81 list.
82 ])
83 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
84 data-list.pspp:4.6: warning: Data for variable D is not valid as format F: Field contents are not numeric.
85
86 Table: Data List
87 A,B,C,D
88 .  ,1.00,2.00,.  @&t@
89 .  ,4.00,.  ,5.00
90 6.00,7.00,8.00,9.00
91 .00,1.00,.  ,.  @&t@
92 .  ,.  ,.  ,.  @&t@
93 2.00,3.00,4.00,5.00
94 ])
95 AT_CLEANUP
96
97 AT_SETUP([DATA LIST LIST with SKIP and tab delimiter])
98 AT_DATA([data-list.pspp], [dnl
99 data list list (tab) notable skip=2/A B C D.
100 begin data.
101 # These records
102 # are skipped.
103 1       2       3       4
104 1       2       3       @&t@
105 1       2               4
106 1       2               @&t@
107 1               3       4
108 1               3       @&t@
109 1                       4
110 1                       @&t@
111         2       3       4
112         2       3       @&t@
113         2               4
114         2               @&t@
115                 3       4
116                 3       @&t@
117                         4
118                         @&t@
119 end data.
120 list.
121 ])
122 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
123 Table: Data List
124 A,B,C,D
125 1.00,2.00,3.00,4.00
126 1.00,2.00,3.00,.  @&t@
127 1.00,2.00,.  ,4.00
128 1.00,2.00,.  ,.  @&t@
129 1.00,.  ,3.00,4.00
130 1.00,.  ,3.00,.  @&t@
131 1.00,.  ,.  ,4.00
132 1.00,.  ,.  ,.  @&t@
133 .  ,2.00,3.00,4.00
134 .  ,2.00,3.00,.  @&t@
135 .  ,2.00,.  ,4.00
136 .  ,2.00,.  ,.  @&t@
137 .  ,.  ,3.00,4.00
138 .  ,.  ,3.00,.  @&t@
139 .  ,.  ,.  ,4.00
140 .  ,.  ,.  ,.  @&t@
141 ])
142 AT_CLEANUP
143
144 dnl Results of this test were confirmed with SPSS 21:
145 dnl http://lists.gnu.org/archive/html/pspp-dev/2013-09/msg00003.html
146 AT_SETUP([DATA LIST FREE with explicit delimiter at end of line])
147 AT_DATA([data-list.pspp], [dnl
148 DATA LIST FREE(',')/x y z.
149 BEGIN DATA.
150 1,2,3
151 4,5,6
152 7,8,9
153 END DATA.
154 LIST.
155
156 DATA LIST FREE(',')/x y z.
157 BEGIN DATA.
158 11,12,13,
159 14,15,16,
160 17,18,19,
161 END DATA.
162 LIST.
163
164 DATA LIST FREE(TAB)/x y z.
165 BEGIN DATA.
166 21      22      23
167 24      25      26
168 27      28      29
169 END DATA.
170 LIST.
171
172 DATA LIST FREE(TAB)/x y z.
173 BEGIN DATA.
174 31      32      33      @&t@
175 34      35      36      @&t@
176 37      38      39      @&t@
177 END DATA.
178 LIST.
179 ])
180 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
181 Table: Data List
182 x,y,z
183 1.00,2.00,3.00
184 4.00,5.00,6.00
185 7.00,8.00,9.00
186
187 Table: Data List
188 x,y,z
189 11.00,12.00,13.00
190 14.00,15.00,16.00
191 17.00,18.00,19.00
192
193 Table: Data List
194 x,y,z
195 21.00,22.00,23.00
196 24.00,25.00,26.00
197 27.00,28.00,29.00
198
199 Table: Data List
200 x,y,z
201 31.00,32.00,33.00
202 34.00,35.00,36.00
203 37.00,38.00,39.00
204 ])
205 AT_CLEANUP
206
207 AT_SETUP([DATA LIST FIXED with multiple records per case])
208 AT_DATA([data-list.pspp], [dnl
209 data list fixed notable
210         /1 start 1-20 (adate)
211         /2 end 1-20 (adate)
212         /3 count 1-3.
213 begin data.
214 07-22-2007
215 10-06-2007
216 x
217 07-14-1789
218 08-26-1789
219 xy
220 01-01-1972
221 12-31-1999
222 682
223 end data.
224 list.
225 ])
226 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
227 data-list.pspp:8.1-8.3: warning: Data for variable count is not valid as format F: Field contents are not numeric.
228
229 data-list.pspp:11.1-11.3: warning: Data for variable count is not valid as format F: Field contents are not numeric.
230
231 Table: Data List
232 start,end,count
233 07/22/2007,10/06/2007,.
234 07/14/1789,08/26/1789,.
235 01/01/1972,12/31/1999,682
236 ])
237 AT_CLEANUP
238
239 AT_SETUP([DATA LIST FIXED with empty trailing record])
240 AT_DATA([data-list.pspp], [dnl
241 data list fixed notable records=2/x 1 y 2.
242 begin data.
243 12
244
245 34
246
247 56
248
249 78
250
251 90
252
253 end data.
254 list.
255 ])
256 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
257 Table: Data List
258 x,y
259 1,2
260 3,4
261 5,6
262 7,8
263 9,0
264 ])
265 AT_CLEANUP
266
267 dnl Test that PSPP accepts LF and CR LF as line ends, but
268 dnl treats isolated CR as linear whitespace.
269 AT_SETUP([DATA LIST with various line-ends])
270 AT_DATA([data-list.sps], [dnl
271 data list list notable file='input.txt'/a b c.
272 list.
273 ])
274 printf '1 2 3\n4 5 6\r\n7\r8\r9\r\n10 11 12\n13 14 15 \r\n16\r\r17\r18\n' > input.txt
275 dnl Make sure that input.txt actually received the data that we expect.
276 dnl It might not have, if we're running on a system that translates \n
277 dnl into some other sequence.
278 AT_CHECK([cksum input.txt], [0], [1732021750 50 input.txt
279 ])
280 AT_CHECK([pspp -o pspp.csv data-list.sps])
281 AT_CHECK([cat pspp.csv], [0], [dnl
282 Table: Data List
283 a,b,c
284 1.00,2.00,3.00
285 4.00,5.00,6.00
286 7.00,8.00,9.00
287 10.00,11.00,12.00
288 13.00,14.00,15.00
289 16.00,17.00,18.00
290 ])
291 AT_CLEANUP
292
293 AT_SETUP([DATA LIST properly expands tabs in input])
294 AT_DATA([data-list.sps], [dnl
295 data list notable /X 1-50 (a).
296 begin data.
297         1       12      123     1234    12345    .
298 end data.
299 print /x.
300 print outfile='print.txt' /x.
301 write outfile='write.txt' /x.
302 execute.
303 ])
304 AT_CHECK([sed -n '/12345/l' data-list.sps], [0], [dnl
305 \t1\t12\t123\t1234\t12345    .$
306 ])
307 AT_CHECK([pspp -o pspp.csv data-list.sps])
308 dnl The CSV driver drops leading spaces so they don't appear here:
309 AT_CHECK([cat pspp.csv], [0], [dnl
310 1       12      123     1234    12345    . @&t@
311 ])
312 dnl But they do appear in print.txt.  The PRINT command also puts a space
313 dnl at the beginning of the line and after the variable:
314 AT_CHECK([cat print.txt], [0], [dnl
315          1       12      123     1234    12345    . @&t@
316 ])
317 dnl WRITE doesn't add spaces at the beginning or end of lines:
318 AT_CHECK([cat write.txt], [0], [dnl
319         1       12      123     1234    12345    .
320 ])
321 AT_CLEANUP
322
323 AT_SETUP([DATA LIST FREE and LIST report missing delimiters])
324 AT_DATA([data-list.sps], [dnl
325 DATA LIST FREE NOTABLE/s (a10).
326 LIST.
327 BEGIN DATA.
328 'y'z
329 END DATA.
330 ])
331 AT_CHECK([pspp -O format=csv data-list.sps], [0], [dnl
332 data-list.sps:4: warning: Missing delimiter following quoted string.
333
334 Table: Data List
335 s
336 y         @&t@
337 z         @&t@
338 ])
339 AT_CLEANUP
340
341 AT_SETUP([DATA LIST FREE and LIST assume a width if omitted])
342 AT_DATA([data-list.sps], [dnl
343 DATA LIST FREE TABLE/s (a) d (datetime) f (f).
344 ])
345 AT_CHECK([pspp -O format=csv data-list.sps], [0], [dnl
346 Table: Reading free-form data from INLINE.
347 Variable,Format
348 s,A1
349 d,DATETIME17.0
350 f,F1.0
351 ])
352 AT_CLEANUP
353
354 AT_SETUP([DATA LIST Decimal comma])
355 AT_DATA([data-list.sps], [dnl
356 SET DECIMAL=COMMA.
357
358 DATA LIST NOTABLE LIST /A *.
359 BEGIN DATA
360 1
361 2
362 3
363 3,5
364 4
365 4,5
366 5
367 6
368 END DATA
369
370 LIST /FORMAT=NUMBERED.
371 ])
372
373 AT_CHECK([pspp -O format=csv data-list.sps], [0], [dnl
374 Table: Data List
375 Case Number,A
376 1,"1,00"
377 2,"2,00"
378 3,"3,00"
379 4,"3,50"
380 5,"4,00"
381 6,"4,50"
382 7,"5,00"
383 8,"6,00"
384 ])
385
386 AT_CLEANUP