hiebeler@csv.rpi.edu (David Hiebeler) (08/11/87)
Hi there. I am using Turbo-Pascal on an IBM PC and want to do some byte-
reading. Specifically, here's the set-up: I have some plotfiles. These
files are stored simple as a series of bytes, each byte's bits representing
so many pixels (7 or 8?). There is no header or anything in the plotfiles,
and they are stored one row after another, with no carriage returns in
between or anything -- just a series of bytes.
What I want to do is read in the file, one byte at a time, so that I may
process it, and construct an array of bits. Does anyone know how to read
bytes like this in Turbo? Assume the plot is PLANESIZE x PLANESIZE. I can
handle converting the bytes into a 2-D array, I just can't get the bytes!
Thanks, please help me soon!
-D.H.
----
David Hiebeler hiebeler@csv.rpi.edu
Chatham, NY "Illusions, Richard! Every
(also Troy, NY) bit of it illusions!"timothym@tekigm2.TEK.COM (Timothy D Margeson) (08/11/87)
Hi,
For most small applications, the following code should do the trick, however
if you need to read large amounts of data, a different approach is needed,
using pointers to arrays of chars as row and column designators as an example.
============================== BEGIN FILEIO.PAS ================================
{$R+}{Enable array bounds checking}
const
MaxChar = 2000; {this must be integer}
{there are tricks you must do if you need more than
32,768 characters}
type
FileSpec = string[13];
TypeChar = char;
var
Error : boolean;
InChar : array[1..MaxChar] of char;
InFile : file of char;
InName : FileSpec;
CharCounter : real;
I,J,K : integer;
procedure Open1(InputFileName:FileSpec;var Error:boolean);
begin
Error:=false;
assign(InFile,InputFileName);
{$I-}reset(InFile){$I+};
Error:=IOResult<>0;
end;
procedure Usage;
begin
writeln('FILEIO - A program to read a graphics file by character -');
writeln(' ');
writeln(' Usage: fileio <file-to-read> ');
writeln(' ');
end;
{================================ MAIN ======================================}
begin
LowVideo;
writeln;
if ParamCount=0 then
Usage
else
begin
case Paramcount of
1 : begin
InName:=ParamStr(1);
end;
else
begin
writeln('Too many arguments in command line!');
HALT
end
end; {case}
begin
for I:=1 to ord(InName[0]) do
InName[I]:=upcase(InName[I]);
Open1(InName,Error);
if not Error then
begin
I:=1;
while (not EOF(InFile)) and (I<MaxChar) do
begin
read(InFile,InChar[I]);
{write(InChar[I]); (* Leave this line in for tests with text *)}
end;
close(InFile);
end; {if open1 error}
end; {if else fill error}
end; {if else param error}
end.
--
Tim Margeson (206)253-5240
PO Box 3500 d/s C1-937 @@ 'Who said that?'
Vancouver, WA. 98668
{amd..hplabs}cae780!tektronix!tekigm2!timothym (this changes daily)