#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, заключается в том, что это не имеет смысла — это глубоко вложенная структура, которая сериализует состояние приложения в памяти.
Мое предложение-либо сдавайся, либо налей себе чего-нибудь покрепче. Это не предназначено для непосредственного использования человеком.