Hi Eric If it is easy to locate the end of the header block, just copy the data into another (memory) stream and use a TStringList LoadFromStream() to separate them.
Todd. > Thanks, Ross. > > Yes, I am in fact using TFileStream and its Read method for the binary > extraction. > > For the Header, I was hoping to find an existing method that I could > call to to extract the the CR LF terminated strings, however I will > use your suggestion for the header fields rather than indexing the > char buffer. > > ------------------------------------------------------------------------ > From: [email protected] > To: [email protected] > Date: Mon, 5 Nov 2012 17:28:12 +1300 > Subject: Re: [DUG] Reading Different Types from a Binary File > > Personally I would use a TFileStream and FS.Read(S,1) one AnsiChar at > a time, concatenating into an AnsiString if you want the info until > you have ‘[End]’#13#10in the string. > > > > This will have the file pointer at the start of the binary data where > you can then FS.Read(MyDWORD,4) or MyByte,1 etc. > > > > Ross. > > > > *From:*[email protected] > [mailto:[email protected]] *On Behalf Of *Eric A > *Sent:* Monday, 5 November 2012 9:08 a.m. > *To:* Delphi ListServer > *Subject:* [DUG] Reading Different Types from a Binary File > > > > This is probably a no-brainer to most of the DUG members, especially > those used to pointers ... > > I need to read and extract data from a binary file which comprises: > - a header with character type strings, each terminated by CR LF (not > nulls) > - binary data area with a mixture of byte types, word types and double > word types > - a file terminator of 0xFFFF hex > > The files are not huge, less than 500KB, as the structure originates > from old memory-constrained microprocessors of the 80's. > > The header looks like it is based on the old INI file format and is of > the form: > > [Header] > Created=1349233072 > Title= > Type=D > Version=162 > [End] > > The binary data area follows next. It comprises different types of > data blocks, with sub blocks, each of which contains either bytes, > words or double words of data in a pre-defined pattern or structure > depending on the type of data block. > > I can read the file into a buffer (array of Char) but I currently have > a chunk of somewhat ugly code to parse the header and find the start > position of the binary data after the '[End] CR LF' string. After > that I need to extract data of various types depending on the > specified datablock types, which I though I might have to use pointers > for. > > What's the best approach for > a) Extracting the header strings - is there a Delphi function to > extract CR LF terminated character sequences as strings and maintain a > pointer to the end of the string? > b) Creating functions for ReadByte, ReadWord, ReadDoubleWord and > incrementing the pointer appropriately in each case ? > > > Eric > > > _______________________________________________ NZ Borland Developers > Group - Delphi mailing list Post: [email protected] Admin: > http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an > email to [email protected] with Subject: unsubscribe > > > _______________________________________________ > NZ Borland Developers Group - Delphi mailing list > Post: [email protected] > Admin: http://delphi.org.nz/mailman/listinfo/delphi > Unsubscribe: send an email to [email protected] with > Subject: unsubscribe -- /Fortune/ favours the *brave*
_______________________________________________ NZ Borland Developers Group - Delphi mailing list Post: [email protected] Admin: http://delphi.org.nz/mailman/listinfo/delphi Unsubscribe: send an email to [email protected] with Subject: unsubscribe
