>>>>> "Jeffrey" == Jeffrey
Cunningham <jeffrey cunningham.net> writes:
Jeffrey> I have been trying to read large binary
files of floating point data
Jeffrey> using CMUCL (19c). I thought I would have to
do it using some form of
Jeffrey> FFI and went to comp.lang.lisp for help
getting that working. I
Jeffrey> succeeded. But Duane Rettig at Allegro
suggested it would be easier to
Jeffrey> use 'read-vector. So I tried that as
follows:
Jeffrey> (let ((vec (make-array 10 :element-type
'double-float)))
Jeffrey> (with-open-file (os "d10.bin")
Jeffrey> (read-vector vec os)
Jeffrey> (print vec)))
Jeffrey> where "d10.bin" is a
double-float binary file containing 10
Jeffrey> elements. When I try to read the file it
produces the following error:
Jeffrey> Type-error in
KERNEL::OBJECT-NOT-DOUBLE-FLOAT-ERROR-HANDLER:
Jeffrey> #\Null is not of type DOUBLE-FLOAT
[snip]
Jeffrey> Is this really a bug? Or am I doing
something else wrong?
Yes, this does appear to be a bug in the implementation of
read-vector.
You can, however, achieve what you want by opening the file
with an
element-type of, say, (unsigned-byte 8), instead of the
default
'character.
I'll have to read some more to understand how read-vector
interacts
with the stream element type. It seems, though, that the
element-type
of the vector overrides the element-type of the stream, more
or less.
Currently, a stream element type of character basically
causes the
code to read in characters.
Ray
|