Я хотел бы извлечь необычное свойство файла, которое добавляет программный пакет (OrcaFlex) при создании файла. В проводнике Windows при наведении курсора на список файлов, например SomeSimulation.sim, на первом снимке экрана ниже появляется всплывающее окно со свойствами, включая "Состояние модели". Здесь я узнал, что они называются infotips. Я хочу получить значение состояния модели (строка "Динамика временной области завершена"), используя Perl или любой другой язык командной строки. Как я могу это сделать? Я использую Windows 7, и комментарий Джеймса помог мне понять, что мне придется использовать это, возможно, вот так.
2 ответа
Я один из авторов OrcaFlex. Без каких-либо гарантий следующий код Python поможет вам получить то, что вам нужно.
import struct
def readModelStateText(fileName):
with open(fileName, 'rb') as f:
content = f.read(0x4000) # hope that the text appears this early in the file
signature = b'\xff\xfa\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
index = content.find(signature)
if index == -1:
return '<model state not found>'
index += len(signature) + 2 # skip over block length
stringLength = struct.unpack('<H', content[index:index + 2])[0]
index += 2
return content[index:index + stringLength].decode('utf-8')
Это ищет определенный блок в файле со знанием подписи заголовка блока. Вполне вероятно (очень маловероятно, я подозреваю), что код найдет тело более раннего блока, который соответствует сигнатуре. И есть другие способы, которыми этот код может потерпеть неудачу.
Я просто предлагаю это, потому что это, возможно, полезно, но с огромным предостережением emptor.
Мой умный коллега заметил, что строка "Динамика временной области завершена" на самом деле уже находится в двоичном файле. Поэтому я использовал grep, не взаимодействуя с Windows, и это облегчение,
head -10 SomeSimulation.sim | grep "Time domain dynamics complete"