problem with logic in reading a binary file

hdante hdante at gmail.com
Sun Mar 30 00:58:29 EDT 2008


On Mar 29, 3:44 pm, "Bryan.Fodn... at gmail.com"
<Bryan.Fodn... at gmail.com> wrote:
> Hello,
>
> I am having trouble writing the code to read a binary string.  I would
> like to extract the values for use in a calculation.
>
> Any help would be great.

 I'm too lazy to debug your binary string, but I suggest that you
completely throw away the binary file and restart with a database or
structured text. See, for example:

 http://pyyaml.org/wiki/PyYAML

 If you have some legacy binary file that you need to process, try
creating a C program that freads the binary file and printfs a text
equivalent.

 If the decision of using binary files is not yours, then


>
> Here is my function that takes in a string.
>
> def parseSequence(data, start):
>
>     group_num = data[start:start+2]
>     element_num = data[start+2:start+4]
>     vl_field = data[start+4:start+8]
>     length = struct.unpack('hh', vl_field)[0]
>     value = data[start+8:(start+8+length)]
>     pos = start+8+length
>     element = (group_num+element_num)
>
>     if element == '\xfe\xff\x00\xe0':
>         data = value
>
>         while start < length:
>             group_num = data[start:start+2]
>             element_num = data[start+2:start+4]
>             vl_field = data[start+4:start+8]
>             length = struct.unpack('hh', vl_field)[0]
>             value = data[start+8:(start+8+length)]
>             start = start+8+length
>             element = (group_num+element_num)
>
>             if element == '\xfe\xff\x00\xe0':
>                 data = value
>
>                 while start < length:
>                     group_num = data[start:start+2]
>                     element_num = data[start+2:start+4]
>                     vl_field = data[start+4:start+8]
>                     length = struct.unpack('hh', vl_field)[0]
>                     value = data[start+8:(start+8+length)]
>                     start = start+8+length
>                     element = (group_num+element_num)
>                     return element, start, value
>
>             else:
>                 return element, start, value
>
>     else:
>         return  element, pos, value
>
> And, here is a sample string (I have split up and indented for
> readability).  There is an identifier (\xfe\xff\x00\xe0) followed by
> the length of the nested values.
>
> '\xfe\xff\x00\xe0\x18\x02\x00\x00     -length=536
>      \n0q\x00\x02\x00\x00\x001
>      \n0x\x00\x02\x00\x00\x0010
>      \n0\x80\x00\x02\x00\x00\x004
>      \n0\xa0\x00\x02\x00\x00\x000
>      \x0c0\x04\x00\xe8\x01\x00\x00
>      \xfe\xff\x00\xe0p\x00\x00\x00     -length=112
>           \n0\x82\x002\x00\x00\x0042.9068704277562\\-392.3545926477\
> \189.182112099444
>           \n0\x84\x00\x0c\x00\x00\x008.9617062e-1
>           \n0\x86\x00\x10\x00\x00\x00127.378510918301
>           \x0c0\x06\x00\x02\x00\x00\x001
>      \xfe\xff\x00\xe0p\x00\x00\x00     -length=112
>           \n0\x82\x002\x00\x00\x0042.9068704277562\\-392.3545926477\
> \189.182112099444
>           \n0\x84\x00\x0c\x00\x00\x001.629998e-1
>           \n0\x86\x00\x10\x00\x00\x0023.159729257873
>           \x0c0\x06\x00\x02\x00\x00\x004
>      \xfe\xff\x00\xe0t\x00\x00\x00      -length=116
>           \n0\x82\x002\x00\x00\x0042.9068704277562\\-392.3545926477\
> \189.182112099444
>           \n0\x84\x00\x10\x00\x00\x001.26285318894435
>           \n0\x86\x00\x10\x00\x00\x00227.690980638769
>           \x0c0\x06\x00\x02\x00\x00\x003
>      \xfe\xff\x00\xe0t\x00\x00\x00      -length=116
>           \n0\x82\x002\x00\x00\x0042.9068704277562\\-392.3545926477\
> \189.182112099444
>           \n0\x84\x00\x10\x00\x00\x001.52797639111557
>           \n0\x86\x00\x10\x00\x00\x00263.433384670643
>           \x0c0\x06\x00\x02\x00\x00\x002 ')




More information about the Python-list mailing list