projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
CD: Fix a bug and add a regression test.
[pspp-builds.git]
/
src
/
language
/
data-io
/
get-data.c
diff --git
a/src/language/data-io/get-data.c
b/src/language/data-io/get-data.c
index dd55752c7cabbfe114a2b3d1e458376a3719ea2b..47b65b445adfc44ffa15e9b72c9738703fc687a0 100644
(file)
--- 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;
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;
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);
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;
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;
if (!parse_format_specifier (lexer, &input)
|| !fmt_check_input (&input))
goto error;
+
+ output = fmt_for_output_from_input (&input);
}
else
{
}
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_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;
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;
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)
v = dict_create_var (dict, name, fmt_var_width (&input));
if (v == NULL)