X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=inline;f=src%2Flanguage%2Fdata-io%2Fget-data.c;h=47b65b445adfc44ffa15e9b72c9738703fc687a0;hb=48bf7bfe2e8398dd26bbab9d8194bda6061fd4aa;hp=dd55752c7cabbfe114a2b3d1e458376a3719ea2b;hpb=9e24f9a5c52650da0700066e8d9e72261c6492ad;p=pspp-builds.git diff --git a/src/language/data-io/get-data.c b/src/language/data-io/get-data.c index dd55752c..47b65b44 100644 --- a/src/language/data-io/get-data.c +++ b/src/language/data-io/get-data.c @@ -279,7 +279,7 @@ static int parse_get_txt (struct lexer *lexer, struct dataset *ds) { struct data_parser *parser = NULL; - struct dictionary *dict = dict_create (); + struct dictionary *dict = dict_create (get_default_encoding ()); struct file_handle *fh = NULL; struct dfm_reader *reader = NULL; char *name = NULL; @@ -293,7 +293,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) if (!lex_force_match_id (lexer, "FILE")) goto error; lex_force_match (lexer, T_EQUALS); - fh = fh_parse (lexer, FH_REF_FILE | FH_REF_INLINE); + fh = fh_parse (lexer, FH_REF_FILE | FH_REF_INLINE, NULL); if (fh == NULL) goto error; @@ -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)