[Numpy-discussion] fromfile() -- help!
Christopher Barker
Chris.Barker at noaa.gov
Thu Jan 7 20:21:34 EST 2010
OK,
I'm trying to dig into the code and figure out how to get it to stop
putting in zeros for missing data with fromfile()/fromstring() text reading.
It looks like the culprit is this, in arraytypes.c.src:
@fname at _scan(FILE *fp, @type@ *ip, void *NPY_UNUSED(ignore),
PyArray_Descr *NPY_UNUSED(ignored))
{
double result;
int ret;
ret = NumPyOS_ascii_ftolf(fp, &result);
*ip = (@type@) result;
return ret;
}
If I'm reading this right, this gets called for the datatype of
interest, and it is passed in a pointer to the file that is being read.
if I have NumPyOS_ascii_ftolf right, it should return 0 if it doesn't
succesfully read a number. However, this looks like it sets the data in
*ip, even if the return value is zero.
It does pass on that return value, but, from ctors.c:
fromfile_next_element(FILE **fp, void *dptr, PyArray_Descr *dtype,
void *NPY_UNUSED(stream_data))
{
/* the NULL argument is for backwards-compatibility */
return dtype->f->scanfunc(*fp, dptr, NULL, dtype);
}
just moves it on through. This is called from here:
if (next(&stream, dptr, dtype, stream_data) < 0) {
break;
}
which is checking for < 0 , so if a zero is returned, it will just go in
its merry way...
So, have I got that right?
Should this get fixed at that last point?
One more point, this is a bit different for fromfile and fromstring, so
I'm getting really confused!
-Chris
--
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker at noaa.gov
More information about the NumPy-Discussion
mailing list