Adjusted code for DATA LIST (free/list) to be more consistent with SPSS in
authorpjk <pjk>
Thu, 13 May 2004 18:31:13 +0000 (18:31 +0000)
committerpjk <pjk>
Thu, 13 May 2004 18:31:13 +0000 (18:31 +0000)
the instance where delimiters are explicitly set.  In particular, if a delim.
is explicitly set, we treat quotes / apostrophes as normal chars:

From SPSS Syntax Base manual:
For data with explicitly specified value delimiters (for example, DATA LIST FREE (","):
· Multiple delimiters without any intervening space can be used to specify missing data.
· The specified delimiters cannot occur within a data value, even if you enclose the value
in quotation marks or apostrophes.

src/data-list.c

index a80fff30757498263d9da5fcd755defbfb5ef1c0..62734de1d191f3b5eb3649c0e403b9ee1e92ee1e 100644 (file)
@@ -970,7 +970,16 @@ cut_field (const struct data_list_pgm *dls, char **ret_cp, int *ret_len)
     return 0;
 
   /* Three types of fields: quoted with ', quoted with ", unquoted. */
-  if (*cp == '\'' || *cp == '"')
+  /* Quoting does not escape the effects of delimiters for explicitly */
+  /* specified delims */
+  /* (consistency with SPSS doco: */
+  /*  For data with explicitly specified value delimiters (for example,  */
+  /*  DATA LIST FREE (","):                                              */
+  /*   - Multiple delimiters without any intervening space can be used   */
+  /*     to specify missing data.                                        */
+  /*   - The specified delimiters cannot occur within a data value, even */
+  /*     if you enclose the value in quotation marks or apostrophes.     */
+  if (dls->delim==0 && (*cp == '\'' || *cp == '"'))
     {
       int quote = *cp;