def read_message(self):
"""
Returns a generator that yields the messages in the currently open LSF file.
This requires the LSFReader object to be opened using the "with" statement.
See read(), where this is done automatically.
:return:
"""
if self.idx:
# Read using index
for pos in self.sorted_idx_iter(self.msg_types):
self.f.seek(pos)
self.peek_header()
self.parser.reset()
b = self.f.read(self.header.size + ctypes.sizeof(IMCHeader) + ctypes.sizeof(IMCFooter))
msg = self.parser.parse(b)
yield msg
else:
# Read file without index
# Check for file end
while self.f.peek(1):
self.peek_header()
if not self.msg_types or self.header.mgid in self.msg_types:
self.parser.reset()
b = self.f.read(self.header.size + ctypes.sizeof(IMCHeader) + ctypes.sizeof(IMCFooter))
msg = self.parser.parse(b)
yield msg
else:
self.f.seek(ctypes.sizeof(IMCHeader) + self.header.size + ctypes.sizeof(IMCFooter), io.SEEK_CUR)
评论列表
文章目录