In system files, allow missing values to be specified on long string
authorBen Pfaff <blp@gnu.org>
Sun, 3 Feb 2008 06:45:03 +0000 (06:45 +0000)
committerBen Pfaff <blp@gnu.org>
Sun, 3 Feb 2008 06:45:03 +0000 (06:45 +0000)
variables, but warn about them because PSPP does not yet support them.
Ignore extension records 20 and 21, which PSPP does not yet support.

Patch #6347.

src/data/ChangeLog
src/data/sys-file-reader.c

index 558bb249dcc51c0083bc97f1872557b14b2820f9..a14e6cdec31072c1e123ef1a34ee788eda278a4d 100644 (file)
@@ -1,3 +1,13 @@
+2008-02-02  Ben Pfaff  <blp@gnu.org>
+
+       Patch #6347.
+
+       * sys-file-reader.c (read_variable_record): Allow missing values
+       to be specified on long string variables, but warn about them
+       because PSPP does not yet support them.
+       (read_extension_record): Ignore extension records 20 and 21, which
+       PSPP does not yet support.
+
 2008-02-01  Ben Pfaff  <blp@gnu.org>
 
        Patch #6386.  Thanks to John Darrington for review and for the
index d71027d586c1a94c3dea6c9792830d89282ec1e9..705fb015639a00ac74efab8ccb39d3119148624c 100644 (file)
@@ -549,11 +549,14 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict,
           for (i = 0; i < missing_value_code; i++)
             mv_add_num (&mv, read_float (r));
         }
-      else if (var_get_width (var) <= MAX_SHORT_STRING)
+      else
         {
           if (missing_value_code < 1 || missing_value_code > 3)
             sys_error (r, _("String missing value indicator field is not "
                             "0, 1, 2, or 3."));
+          if (var_is_long_string (var))
+            sys_warn (r, _("Ignoring missing values on long string variable "
+                           "%s, which PSPP does not yet support."), name);
           for (i = 0; i < missing_value_code; i++)
             {
               char string[9];
@@ -561,10 +564,8 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict,
               mv_add_str (&mv, string);
             }
         }
-      else
-        sys_error (r, _("Long string variable %s may not have missing "
-                        "values."), name);
-      var_set_missing_values (var, &mv);
+      if (!var_is_long_string (var))
+        var_set_missing_values (var, &mv);
     }
 
   /* Set formats. */
@@ -752,6 +753,18 @@ read_extension_record (struct sfm_reader *r, struct dictionary *dict,
          SPSS 14. */
       break;
 
+    case 20:
+      /* New in SPSS 16.  Contains a single string that describes
+         the character encoding, e.g. "windows-1252". */
+      break;
+
+    case 21:
+      /* New in SPSS 16.  Encodes value labels for long string
+         variables. */
+      sys_warn (r, _("Ignoring value labels for long string variables, "
+                     "which PSPP does not yet support."));
+      break;
+
     default:
       sys_warn (r, _("Unrecognized record type 7, subtype %d."), subtype);
       break;