Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.46 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # vim: sw=4 ts=4 expandtab ai
  4.  
  5. import sys
  6.  
  7. BLOCK_SIZE = 550
  8. HEADER_SIZE = 32
  9. CODEC = 'hex_codec'
  10.  
  11. def gen_record(inf, labels=('\x32', '\x33', '\x34'),
  12.                hsize=HEADER_SIZE, bsize=BLOCK_SIZE):
  13.     yield (0, inf.read(hsize))
  14.     # skip to the beginning of the first record
  15.     while inf.read(1) not in labels:
  16.         pass
  17.     block = inf.read(bsize)
  18.     rno = 1
  19.     while True:
  20.         pos = 0
  21.         while True:
  22.             pos = block.find('\xff', pos)
  23.             if pos == -1:
  24.                 print "Error: end of record %d (%s) not found" % \
  25.                        (rno, block.encode(CODEC))
  26.                 sys.exit(1)
  27.             if len(block) == pos+1:
  28.                 yield (rno, block[:pos])
  29.                 return
  30.             if block[pos+1] in labels:
  31.                 pos = pos + 2
  32.                 yield (rno, block[:pos])
  33.                 block = block[pos:] + inf.read(bsize-len(block[pos:]))
  34.                 rno += 1
  35.                 break
  36.  
  37. def main(argv):
  38.     fname = argv[1]
  39.  
  40.     inf = open(fname,"rb")
  41.     outf = open(fname + '.out', "w")
  42.  
  43.     for rno, record in gen_record(inf):
  44.         record = record.encode(CODEC)
  45.         if rno:
  46.             outf.write("<RECORD>%s<RECORD>\n" % record)
  47.         else:
  48.             outf.write("<ADM RECORD>%s<RECORD>\n" % record)
  49.  
  50.     outf.close()
  51.     inf.close()
  52.     return 0
  53.  
  54. if __name__ == "__main__":
  55.     sys.exit(main(sys.argv))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement