GET DATA /TYPE=TXT: Also allow full format to be specified.
[pspp-builds.git] / src / language / data-io / get-data.c
index e3e6c5d43bd0d4a4b7818d88e2a81b2f02e3bd32..47b65b445adfc44ffa15e9b72c9738703fc687a0 100644 (file)
@@ -520,19 +520,46 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds)
           if (!parse_format_specifier (lexer, &input)
               || !fmt_check_input (&input))
             goto error;
+
+          output = fmt_for_output_from_input (&input);
         }
       else
         {
+          char fmt_type_name[FMT_TYPE_LEN_MAX + 1];
+          enum fmt_type fmt_type;
+          int w, d;
+
           if (!parse_column_range (lexer, 0, &fc, &lc, NULL))
             goto error;
-          if (!parse_format_specifier_name (lexer, &input.type))
+
+          /* Accept a format (e.g. F8.2) or just a type name (e.g. DOLLAR).  */
+          if (!parse_abstract_format_specifier (lexer, fmt_type_name, &w, &d))
             goto error;
+          if (!fmt_from_name (fmt_type_name, &fmt_type))
+            {
+              msg (SE, _("Unknown format type `%s'."), fmt_type_name);
+              goto error;
+            }
+
+          /* Compose input format. */
+          input.type = fmt_type;
           input.w = lc - fc + 1;
           input.d = 0;
           if (!fmt_check_input (&input))
             goto error;
+
+          /* Compose output format. */
+          if (w != 0)
+            {
+              output.type = fmt_type;
+              output.w = w;
+              output.d = d;
+              if (!fmt_check_output (&output))
+                goto error;
+            }
+          else
+            output = fmt_for_output_from_input (&input);
         }
-      output = fmt_for_output_from_input (&input);
 
       v = dict_create_var (dict, name, fmt_var_width (&input));
       if (v == NULL)