projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge commit 'origin/stable'
[pspp-builds.git]
/
src
/
language
/
data-io
/
data-parser.c
diff --git
a/src/language/data-io/data-parser.c
b/src/language/data-io/data-parser.c
index e7e92bf6d37395f239f2906912e7f835524898d7..020f8e4c7e5a20a0caabc4add9f228f98937d1b6 100644
(file)
--- a/
src/language/data-io/data-parser.c
+++ b/
src/language/data-io/data-parser.c
@@
-41,6
+41,7
@@
/* Data parser for textual data like that read by DATA LIST. */
struct data_parser
{
/* Data parser for textual data like that read by DATA LIST. */
struct data_parser
{
+ const struct dictionary *dict; /*Dictionary of destination */
enum data_parser_type type; /* Type of data to parse. */
int skip_records; /* Records to skip before first real data. */
casenumber max_cases; /* Max number of cases to read. */
enum data_parser_type type; /* Type of data to parse. */
int skip_records; /* Records to skip before first real data. */
casenumber max_cases; /* Max number of cases to read. */
@@
-79,7
+80,7
@@
static void set_any_sep (struct data_parser *parser);
/* Creates and returns a new data parser. */
struct data_parser *
/* Creates and returns a new data parser. */
struct data_parser *
-data_parser_create (
void
)
+data_parser_create (
const struct dictionary *dict
)
{
struct data_parser *parser = xmalloc (sizeof *parser);
{
struct data_parser *parser = xmalloc (sizeof *parser);
@@
-91,6
+92,7
@@
data_parser_create (void)
parser->fields = NULL;
parser->field_cnt = 0;
parser->field_allocated = 0;
parser->fields = NULL;
parser->field_cnt = 0;
parser->field_allocated = 0;
+ parser->dict = dict;
parser->span = true;
parser->empty_line_has_field = false;
parser->span = true;
parser->empty_line_has_field = false;
@@
-483,7
+485,8
@@
cut_field (const struct data_parser *parser, struct dfm_reader *reader,
/* Regular field. */
ss_get_chars (&p, ss_cspan (p, ds_ss (&parser->any_sep)), field);
*last_column = dfm_column_start (reader);
/* Regular field. */
ss_get_chars (&p, ss_cspan (p, ds_ss (&parser->any_sep)), field);
*last_column = dfm_column_start (reader);
- if (!ss_ltrim (&p, parser->soft_seps) || ss_is_empty (p))
+ if (!ss_ltrim (&p, parser->soft_seps) || ss_is_empty (p)
+ || ss_find_char (parser->hard_seps, p.string[0]) != SIZE_MAX)
{
/* Advance past a trailing hard separator,
regardless of whether one actually existed. If
{
/* Advance past a trailing hard separator,
regardless of whether one actually existed. If
@@
-505,7
+508,7
@@
static bool
parse_fixed (const struct data_parser *parser, struct dfm_reader *reader,
struct ccase *c)
{
parse_fixed (const struct data_parser *parser, struct dfm_reader *reader,
struct ccase *c)
{
-
enum legacy_encoding
encoding = dfm_reader_get_legacy_encoding (reader);
+
const char *
encoding = dfm_reader_get_legacy_encoding (reader);
struct field *f;
int row;
struct field *f;
int row;
@@
-531,6
+534,7
@@
parse_fixed (const struct data_parser *parser, struct dfm_reader *reader,
f->format.w),
encoding, f->format.type, f->format.d,
f->first_column, f->first_column + f->format.w,
f->format.w),
encoding, f->format.type, f->format.d,
f->first_column, f->first_column + f->format.w,
+ parser->dict,
case_data_rw_idx (c, f->case_idx),
fmt_var_width (&f->format));
case_data_rw_idx (c, f->case_idx),
fmt_var_width (&f->format));
@@
-547,7
+551,7
@@
static bool
parse_delimited_span (const struct data_parser *parser,
struct dfm_reader *reader, struct ccase *c)
{
parse_delimited_span (const struct data_parser *parser,
struct dfm_reader *reader, struct ccase *c)
{
-
enum legacy_encoding
encoding = dfm_reader_get_legacy_encoding (reader);
+
const char *
encoding = dfm_reader_get_legacy_encoding (reader);
struct string tmp = DS_EMPTY_INITIALIZER;
struct field *f;
struct string tmp = DS_EMPTY_INITIALIZER;
struct field *f;
@@
-574,6
+578,7
@@
parse_delimited_span (const struct data_parser *parser,
data_in (s, encoding, f->format.type, 0,
first_column, last_column,
data_in (s, encoding, f->format.type, 0,
first_column, last_column,
+ parser->dict,
case_data_rw_idx (c, f->case_idx),
fmt_var_width (&f->format));
}
case_data_rw_idx (c, f->case_idx),
fmt_var_width (&f->format));
}
@@
-588,7
+593,7
@@
static bool
parse_delimited_no_span (const struct data_parser *parser,
struct dfm_reader *reader, struct ccase *c)
{
parse_delimited_no_span (const struct data_parser *parser,
struct dfm_reader *reader, struct ccase *c)
{
-
enum legacy_encoding
encoding = dfm_reader_get_legacy_encoding (reader);
+
const char *
encoding = dfm_reader_get_legacy_encoding (reader);
struct string tmp = DS_EMPTY_INITIALIZER;
struct substring s;
struct field *f;
struct string tmp = DS_EMPTY_INITIALIZER;
struct substring s;
struct field *f;
@@
-614,6
+619,7
@@
parse_delimited_no_span (const struct data_parser *parser,
data_in (s, encoding, f->format.type, 0,
first_column, last_column,
data_in (s, encoding, f->format.type, 0,
first_column, last_column,
+ parser->dict,
case_data_rw_idx (c, f->case_idx),
fmt_var_width (&f->format));
}
case_data_rw_idx (c, f->case_idx),
fmt_var_width (&f->format));
}