struct map_in in;
set_map_in_generic (&in, MAP_CONVERT);
add_mapping (trns, &map_allocated, &in);
+ set_map_out_num (&trns->mappings[trns->map_cnt - 1].out, 0.0);
dst_type = VAR_NUMERIC;
if (trns->src_type != VAR_STRING
return false;
set_map_in_str (in, pool, lex_tokstr (lexer), max_src_width);
lex_get (lexer);
+ if (lex_token (lexer) == T_ID
+ && lex_id_match (ss_cstr ("THRU"), ss_cstr (lex_tokid (lexer))))
+ {
+ msg (SE, _("THRU is not allowed with string variables."));
+ return false;
+ }
}
return true;
if (!out->copy_input && out->width < max_dst_width)
{
char *s = pool_alloc_unaligned (trns->pool, max_dst_width + 1);
- str_copy_rpad (s, max_dst_width + 1, out->value.c);
+ buf_copy_rpad (s, max_dst_width + 1, out->value.c, out->width);
out->value.c = s;
}
}
match = value == in->x.f;
break;
case MAP_MISSING:
- match = var_is_num_missing (v, value, MV_USER);
+ match = var_is_num_missing (v, value, MV_ANY);
break;
case MAP_RANGE:
match = value >= in->x.f && value <= in->y.f;
const struct map_out *out;
if (trns->src_type == VAR_NUMERIC)
- out = find_src_numeric (trns, src_data->f, src_var);
+ out = find_src_numeric (trns, src_data->f, src_var);
else
- out = find_src_string (trns, src_data->s, var_get_width (src_var));
+ out = find_src_string (trns, src_data->s, var_get_width (src_var));
if (trns->dst_type == VAR_NUMERIC)
{