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 07000eb2041aa1a9870c38d8d7ea42826292d024..47b65b445adfc44ffa15e9b72c9738703fc687a0 100644
(file)
--- a/
src/language/data-io/get-data.c
+++ b/
src/language/data-io/get-data.c
@@
-122,7
+122,10
@@
parse_get_psql (struct lexer *lexer, struct dataset *ds)
struct casereader *reader = psql_open_reader (&psql, &dict);
if ( reader )
struct casereader *reader = psql_open_reader (&psql, &dict);
if ( reader )
- proc_set_active_file (ds, reader, dict);
+ {
+ dataset_set_dict (ds, dict);
+ dataset_set_source (ds, reader);
+ }
}
ds_destroy (&psql.sql);
}
ds_destroy (&psql.sql);
@@
-232,7
+235,10
@@
parse_get_gnm (struct lexer *lexer, struct dataset *ds)
struct casereader *reader = gnumeric_open_reader (&gri, &dict);
if ( reader )
struct casereader *reader = gnumeric_open_reader (&gri, &dict);
if ( reader )
- proc_set_active_file (ds, reader, dict);
+ {
+ dataset_set_dict (ds, dict);
+ dataset_set_source (ds, reader);
+ }
}
free (gri.file_name);
}
free (gri.file_name);
@@
-273,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;
@@
-287,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;
@@
-514,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)