[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[csv 08/10] DATA LIST: Don't report an error for an empty final field in
From: |
Ben Pfaff |
Subject: |
[csv 08/10] DATA LIST: Don't report an error for an empty final field in LIST format. |
Date: |
Sun, 8 Aug 2010 10:17:50 -0700 |
Also add test to prevent inadvertent regressions.
---
src/language/data-io/data-parser.c | 9 +++++----
tests/language/data-io/data-list.at | 30 ++++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/src/language/data-io/data-parser.c
b/src/language/data-io/data-parser.c
index 1e68c90..2d7f9f4 100644
--- a/src/language/data-io/data-parser.c
+++ b/src/language/data-io/data-parser.c
@@ -597,22 +597,23 @@ parse_delimited_no_span (const struct data_parser *parser,
const char *encoding = dfm_reader_get_legacy_encoding (reader);
struct string tmp = DS_EMPTY_INITIALIZER;
struct substring s;
- struct field *f;
+ struct field *f, *end;
if (dfm_eof (reader))
return false;
- for (f = parser->fields; f < &parser->fields[parser->field_cnt]; f++)
+ end = &parser->fields[parser->field_cnt];
+ for (f = parser->fields; f < end; f++)
{
int first_column, last_column;
if (!cut_field (parser, reader, &first_column, &last_column, &tmp, &s))
{
- if (settings_get_undefined ())
+ if (f < end - 1 && settings_get_undefined ())
msg (SW, _("Missing value(s) for all variables from %s onward. "
"These will be filled with the system-missing value "
"or blanks, as appropriate."),
f->name);
- for (; f < &parser->fields[parser->field_cnt]; f++)
+ for (; f < end; f++)
value_set_missing (case_data_rw_idx (c, f->case_idx),
fmt_var_width (&f->format));
goto exit;
diff --git a/tests/language/data-io/data-list.at
b/tests/language/data-io/data-list.at
index 5897088..7683b9c 100644
--- a/tests/language/data-io/data-list.at
+++ b/tests/language/data-io/data-list.at
@@ -1,5 +1,35 @@
AT_BANNER([DATA LIST])
+AT_SETUP([DATA LIST LIST with empty fields])
+AT_DATA([data-list.pspp], [dnl
+DATA LIST LIST NOTABLE /A B C (F1.0).
+BEGIN DATA.
+,,
+,,3
+,2,
+,2,3
+1,,
+1,,3
+1,2,
+1,2,3
+END DATA.
+
+LIST.
+])
+AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
+Table: Data List
+A,B,C
+.,.,.
+.,.,3
+.,2,.
+.,2,3
+1,.,.
+1,.,3
+1,2,.
+1,2,3
+])
+AT_CLEANUP
+
AT_SETUP([DATA LIST LIST with explicit delimiters])
AT_DATA([data-list.pspp], [dnl
data list list ('|','X') /A B C D.
--
1.7.1
- Implementing SAVE TRANSLATE for comma- and tab-separated data, Ben Pfaff, 2010/08/08
- [csv 08/10] DATA LIST: Don't report an error for an empty final field in LIST format.,
Ben Pfaff <=
- [csv 06/10] DATA LIST: Convert tests to use Autotest., Ben Pfaff, 2010/08/08
- [csv 01/10] i18n: Make a few strings more generic for translators., Ben Pfaff, 2010/08/08
- [csv 07/10] DATA LIST: Fix output column reporting for FREE and LIST formats., Ben Pfaff, 2010/08/08
- [csv 04/10] sys-file-writer: Make write_error(), close_writer() static., Ben Pfaff, 2010/08/08
- [csv 10/10] Implement SAVE TRANSLATE to comma- and tab-delimited text formats., Ben Pfaff, 2010/08/08
- [csv 03/10] sys-file-writer: Fix comment., Ben Pfaff, 2010/08/08
- [csv 02/10] Replace S_I[RWX]{USR,GRP,OTH} macros by their values., Ben Pfaff, 2010/08/08
- [csv 09/10] SAVE: Fix UNSELECTED=RETAIN with a filter variable., Ben Pfaff, 2010/08/08