Re: Reads in only part of file
- To: mathgroup at smc.vnet.net
- Subject: [mg51188] Re: Reads in only part of file
- From: Bill Rowe <readnewsciv at earthlink.net>
- Date: Thu, 7 Oct 2004 05:26:25 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
On 10/6/04 at 4:34 AM, stevebg at adelphia.net (Steve Gray) wrote:
>I have a binary file of 945 coordinates, in X,Y pairs, each value
>being 8 bits, for 1890 bytes total. I have examined the file with a
>hex file display and editor (which shows the file as 2 hex
>characters per byte) and confirms that the file contains exactly
>the expected number of bytes. My input process is:
>roswin[nv_]:= Module[{st1},
>nverts = nv; st1="D:\Math\Geometry\Combinatorial
>Geom\Oswin\Otypes\otypes07.b08"; Print["Reading file: ",st1];
>xin=ReadList[st1,{Byte,Byte}];
>]
>The file opens ok but the input list xin contains only 230
>coordinate pairs (byte pairs) instead of 945. The values that do
>read in are correct. The {Byte,Byte} seems to be the only data type
>that works here. Can anyone suggest what I am doing wrong? (Do I
>have to Close st1?) Thank you for any tips.
I suggest either ReadListBinary in the package Utilities`BinaryFiles` or BinaryImport in the Experimental context. With ReadListBinary your code could become
<<Utilities`BinaryFiles`;
roswin[nv_]:= Module[{st1},
nverts = nv;
st1="D:\Math\Geometry\Combinatorial Geom\Oswin\Otypes\otypes07.b08";
Print["Reading file: ",st1];
xin=ReadListBinary[st1,{Byte,Byte}];
]
However, I would change the code to be as follows:
roswin[st1_]:= Module[{},
Print["Reading file: ",st1];
ReadListBinary[st1,{Byte,Byte}]
]
Passing the filename allows the function to be used for any file unlike hard coding the filename as part of the function. Also, my experience indicates manipulating global variables inside a module or function leads to greater difficulties debugging code or modifying those functions/modules later.
--
To reply via email subtract one hundred and four