Я хотел бы извлечь необычное свойство файла, которое добавляет программный пакет (OrcaFlex) при создании файла. В проводнике Windows при наведении курсора на список файлов, например SomeSimulation.sim, на первом снимке экрана ниже появляется всплывающее окно со свойствами, включая "Состояние модели". Здесь я узнал, что они называются infotips. Я хочу получить значение состояния модели (строка "Динамика временной области завершена"), используя Perl или любой другой язык командной строки. Как я могу это сделать? Я использую Windows 7, и комментарий Джеймса помог мне понять, что мне придется использовать это, возможно, вот так.

список файлов

2 ответа2

1

Я один из авторов 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.

0

Мой умный коллега заметил, что строка "Динамика временной области завершена" на самом деле уже находится в двоичном файле. Поэтому я использовал grep, не взаимодействуя с Windows, и это облегчение,

head -10 SomeSimulation.sim | grep "Time domain dynamics complete"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .