Я пытаюсь написать программу, которая интегрируется с Advent Axys, программным обеспечением для специалистов по финансовому планированию и тому подобное. Сайт продукта находится здесь: http://www.advent.com/solutions/asset-managers-software/axys-platform
Мне нужно записать новые записи в файлы цен, но большинство из них являются двоичными. Я посмотрел в Интернете и не нашел много, и я написал по электронной почте их поддержку, но я сомневаюсь, что это поможет.
У меня есть короткий фиктивный файл и распечатка, которую программа передает этому файлу. Я прогнал файл через скрипт ruby, который печатает символ, если это символ слова или символ, и ASCII val в противном случае. Вот скрипт Ruby:
pri = File.read '062109_dummy.pri'
pri.each_byte do |char|
print char.chr =~ /[\w!@#\$%\^&\*\(\)\-\\\/\+\.]/ ? char.chr : ' ' + char.to_s + ' '
end
И вывод:
<code>
pri1.001 254 250 251 252 29 0 0 2 adusnok 0 0 0 0 0 0 0 0 0 33333s7@ 1 254 250 251 252 29 0 0 2 csusxom 0 0 0 0 0 0 0 0 0 H 225 z 20 174 GA@ 1 254 250 251 252 29 0 0 2 etusvv 0 0 0 0 0 0 0 0 0 0 246 (\ 143 194 213 F@ 1 254 250 251 252 29 0 0 2 fdusoakbx 0 0 0 0 0 0 0 174 G 225 z 20 174 (@ 1 254 250 251 252 29 0 0 2 oousfidde09 0 0 0 0 0 154 153 153 153 153 185 S@ 1 254 250251 252 29 0 0 2 qpusfid_eqix 0 0 0 0 164 p 61 10 215 cL@ 1 254 250 251 252 29 0 0 2 vausvg_sc 0 0 0 0 0 0 0 )\ 143 194 245 248 P@ 1
Обратите внимание, что если число имеет пробелы вокруг него, это означает, что это значение байта, а если нет, то значение байта было ASCII-представлением этого числа.
Я знаю, что цепочки букв (например, «adusnok») являются представлениями акций и тому подобного. Затем есть биты с 0-значными значениями, потому что пространство для символов имеет фиксированный размер (вот почему меньше символов после более длинного символа). Последовательность @ 1 254 250 251 252 29 0 0 2
, по-видимому, означает конец записи, предшествующий символу новой записи. Кроме того, некоторые из них могут означать что-то одинаковое для всех этих, но не так много, кажется, то же самое. После этого я в принципе ничего не знаю. У меня есть распечатка того, что программа считает, что отображается на. С 3 пробелами, разделяющими каждый столбец, это:
adus nok 23.45 NOKIA CORP ADR 0.393 05/30/2008
csus xom 34.56 EXXON MOBIL CORPORATION COM 1.68 06/10/2009
etus vv 45.67 VANGUARD LRG CAP ETF US PRIME MKT 750 1.04 3/31/2009
Есть еще кое-что, но это должно дать вам довольно хорошую идею. Я думаю, что вполне возможно, что описания и, возможно, другие вещи, хранятся в других файлах и просто просмотрены. Но я знаю, что цены в этом файле, потому что это файлы цен, и в этом весь смысл. Итак:
33333s7 => 23,45
H225 z 20 174 GA => 34,56
246 (\ 143 194 213 F => 45,67
Обратите внимание, что в первом сохраняются 3 и 7, все числа - это значения байтов, а не ASCII-представления значений. Также обратите внимание, что эти значения могут представлять немного больше, чем просто цена, но они определенно представляют цену.
Есть идеи? Я не знаком с обычными двоичными кодировками, но я не удивлюсь, если они используют довольно распространенный метод.