926 |
if (sv.n_missing_values != 0) |
if (sv.n_missing_values != 0) |
927 |
{ |
{ |
928 |
flt64 mv[3]; |
flt64 mv[3]; |
929 |
|
int mv_cnt = abs (sv.n_missing_values); |
930 |
|
|
931 |
if (vv->width > MAX_SHORT_STRING) |
if (vv->width > MAX_SHORT_STRING) |
932 |
lose ((ME, _("%s: Long string variable %s may not have missing " |
lose ((ME, _("%s: Long string variable %s may not have missing " |
933 |
"values."), |
"values."), |
934 |
handle_get_filename (r->fh), vv->name)); |
handle_get_filename (r->fh), vv->name)); |
935 |
|
|
936 |
assertive_buf_read (r, mv, sizeof *mv * abs (sv.n_missing_values), 0); |
assertive_buf_read (r, mv, sizeof *mv * mv_cnt, 0); |
937 |
|
|
938 |
if (r->reverse_endian && vv->type == NUMERIC) |
if (r->reverse_endian && vv->type == NUMERIC) |
939 |
for (j = 0; j < abs (sv.n_missing_values); j++) |
for (j = 0; j < mv_cnt; j++) |
940 |
bswap_flt64 (&mv[j]); |
bswap_flt64 (&mv[j]); |
941 |
|
|
942 |
if (sv.n_missing_values > 0) |
if (sv.n_missing_values > 0) |
943 |
{ |
{ |
944 |
vv->miss_type = sv.n_missing_values; |
for (j = 0; j < sv.n_missing_values; j++) |
945 |
if (vv->type == NUMERIC) |
if (vv->type == NUMERIC) |
946 |
for (j = 0; j < sv.n_missing_values; j++) |
mv_add_num (&vv->miss, mv[j]); |
947 |
vv->missing[j].f = mv[j]; |
else |
948 |
else |
mv_add_str (&vv->miss, (unsigned char *) &mv[j]); |
|
for (j = 0; j < sv.n_missing_values; j++) |
|
|
memcpy (vv->missing[j].s, &mv[j], vv->width); |
|
949 |
} |
} |
950 |
else |
else |
951 |
{ |
{ |
|
int x = 0; |
|
|
|
|
952 |
if (vv->type == ALPHA) |
if (vv->type == ALPHA) |
953 |
lose ((ME, _("%s: String variable %s may not have missing " |
lose ((ME, _("%s: String variable %s may not have missing " |
954 |
"values specified as a range."), |
"values specified as a range."), |
955 |
handle_get_filename (r->fh), vv->name)); |
handle_get_filename (r->fh), vv->name)); |
956 |
|
|
957 |
if (mv[0] == r->lowest) |
if (mv[0] == r->lowest) |
958 |
{ |
mv_add_num_range (&vv->miss, LOWEST, mv[1]); |
|
vv->miss_type = MISSING_LOW; |
|
|
vv->missing[x++].f = mv[1]; |
|
|
} |
|
959 |
else if (mv[1] == r->highest) |
else if (mv[1] == r->highest) |
960 |
{ |
mv_add_num_range (&vv->miss, mv[0], HIGHEST); |
|
vv->miss_type = MISSING_HIGH; |
|
|
vv->missing[x++].f = mv[0]; |
|
|
} |
|
961 |
else |
else |
962 |
{ |
mv_add_num_range (&vv->miss, mv[0], mv[1]); |
|
vv->miss_type = MISSING_RANGE; |
|
|
vv->missing[x++].f = mv[0]; |
|
|
vv->missing[x++].f = mv[1]; |
|
|
} |
|
963 |
|
|
964 |
if (sv.n_missing_values == -3) |
if (sv.n_missing_values == -3) |
965 |
{ |
mv_add_num (&vv->miss, mv[2]); |
|
vv->miss_type += 3; |
|
|
vv->missing[x++].f = mv[2]; |
|
|
} |
|
966 |
} |
} |
967 |
} |
} |
|
else |
|
|
vv->miss_type = MISSING_NONE; |
|
968 |
|
|
969 |
if (!parse_format_spec (r, sv.print, &vv->print, vv) |
if (!parse_format_spec (r, sv.print, &vv->print, vv) |
970 |
|| !parse_format_spec (r, sv.write, &vv->write, vv)) |
|| !parse_format_spec (r, sv.write, &vv->write, vv)) |