Как интерпретировать/экспортировать большие данные plist

#xcode #macos #plist

Вопрос:

У меня есть файлы plist, в которых около 60 тысяч строк кода (на BBEdit), и я пытаюсь декодировать некоторые точки данных, сохраненные в этих файлах. Компания, занимающаяся базами данных, через которую я приобрел программное обеспечение, не будет преобразовывать мои данные в другой формат (CSV или другой), который я могу использовать с продуктом конкурента, и они не будут преобразовывать их внутренне и отправлять мне экспортированные данные. Я начал просматривать и изменять одно значение, а затем посмотрел на список и увидел, где было внесено изменение, и я пытаюсь выяснить, есть ли способ узнать, на что ссылаются целые числа? Я искал информацию о том, как работают списки, и кажется, что целочисленное значение ссылается на какое-то место ранее в документе plist, но поскольку я не писал эту программу, и у меня нет доступа к источнику или какой-либо помощи от компании, мне придется перепроектировать это, чтобы я мог экспортировать интересующие меня точки данных, так как я хотел бы сохранить около 100 тыс. значений. Королевская ПИТА, но вот она у тебя. CF$UID, по-видимому, является уникальным идентификатором основного фонда, но это все, что у меня есть. Любые предложения были бы очень полезны.

 <dict>
    <key>$archiver</key>
    <string>NSKeyedArchiver</string>
    <key>$objects</key>
    <array>
    ...some 30-40K lines later
    <dict>
        <key>$class</key>
        <dict>
            <key>CF$UID</key>
            <integer>153</integer>
        </dict>
        <key>stringValue</key>
        <dict>
            <key>CF$UID</key>
            <integer>24</integer>   <--- this is the value that's changing for my particular data point I'm interested in.
        </dict>
 

… и так далее, и так далее, затем, в конце, что-то вроде этого.

     </array>
    <key>$top</key>
    <dict>
        <key>root</key>
        <dict>
            <key>CF$UID</key>
            <integer>1</integer>
        </dict>
    </dict>
    <key>$version</key>
    <integer>100000</integer>
</dict>
</plist>
 

Ответ №1:

Похоже, что было сделано то, что NSKeyedArchiver использовалось для сериализации графа объектов Objective-C в список свойств в формате XML. Без исходного кода (или, по крайней мере, файлов заголовков) для этого кода это будет очень болезненный процесс. Причина, по которой они не предоставят вам это в формате CSV, заключается в том, что это не имеет смысла — это глубоко вложенная структура, которая сериализует состояние приложения в памяти.

Мое предложение-либо сдавайся, либо налей себе чего-нибудь покрепче. Это не предназначено для непосредственного использования человеком.