1

Тема: таблиця в бінарному коді

Маю таблицю в бінарному коді. При відкриті текстовим редактором, наприклад gedit-ом, видно її як набір ієрогліфів. Як її можна прочитати Python, щоб зберегти в людську txt таблицю? З чого починати?

2

Re: таблиця в бінарному коді

скажіть, звідкіля ви ту таблицю взяли. краще викладіть її тут.

Подякували: HetmanNet1

3

Re: таблиця в бінарному коді

"В бінарному коді" - це не опис формату.
А так - відкриваєте в режимі "rb" і читаєте.

4 Востаннє редагувалося dialectstat (10.02.2015 01:01:07)

Re: таблиця в бінарному коді

Ось ця таблиця http://dialectstat.wikispaces.com/file/ … _0_0_0.dat
дав колега по роботі, це mock каталог галактик. Структура така: перша лінійка - header далі блок з числами, знову рядок з header і т.д.

5

Re: таблиця в бінарному коді

koala написав:

"В бінарному коді" - це не опис формату.
А так - відкриваєте в режимі "rb" і читаєте.

Читаю з "rb" ієрогліфи стали більш латинськими, але все-одно не тими що очікую:

xfcj\x18H\xc8\xa5CH\xdd6\xeeF\xbb\xc4\x90G\xff\xca\xf7F\x88\x1f\x15H\xb4\x95]G\xd2\x86\x18Hr\x8b\xa2G\xc3\x92\x03G\xf5\xc2\x12H0\xec\x98Cv\xb9aG\x14m\xc6G\x86\x82\x01HR}dH\xcf\xdf\x16H`\xc1`G)', '>G\x17\x13\x01H\xca\xaa\xdbG\x80/\x1cG\x80\x86\xe0Gfg\xf4G\xc9\xd5\xc2G\xc5\xb4\xf7G\xa2\x89\x97GW\xe7\x03H\xce7$H0\xbdFFY\xbc\x95F\x8a\xf9oH9\xe9\x04H\xc5\x

6

Re: таблиця в бінарному коді

кидайте сюди опис формату, бо мнеможливо прочитати зі справжнього файлу "абстрактні" дані.

7

Re: таблиця в бінарному коді

0xDADA11C7 написав:

кидайте сюди опис формату, бо мнеможливо прочитати зі справжнього файлу "абстрактні" дані.

Що означає опис формату?

8

Re: таблиця в бінарному коді

специфікація,
опис структур даних, який містять файли цього типу

Подякували: HetmanNet1

9

Re: таблиця в бінарному коді

0xDADA11C7 написав:

специфікація,
опис структур даних, який містять файли цього типу

З того що мені казали,
перший рядок - текст header
дальше x y z - координати числа

10

Re: таблиця в бінарному коді

перший рядок - текст header

Ви там бачите " текст header" чи взагалі якийсь рядок? бо я ні.

Подякували: HetmanNet1

11

Re: таблиця в бінарному коді

dialectstat написав:
0xDADA11C7 написав:

специфікація,
опис структур даних, який містять файли цього типу

З того що мені казали,
перший рядок - текст header
дальше x y z - координати числа

Вам набрехали, там взагалі нема рядків. Просто час від часу зустрічаються символи нового рядку(10, 13), але оскільки файл бінарний, вони означають щось інше, а не новий рядок.
А судячи зі щільності файлу, він ще й заархівований чи зашифрований, а не просто бінарний.

12 Востаннє редагувалося yarko (10.02.2015 09:22:13)

Re: таблиця в бінарному коді

dialectstat написав:
0xDADA11C7 написав:

кидайте сюди опис формату, бо мнеможливо прочитати зі справжнього файлу "абстрактні" дані.

Що означає опис формату?

Наприклад такий.

Перший байт - Кількість стовпців.
Другий - кількість байт в 1-го стовпці.
Третій - кількість байт в 2-му стовпці.
...
Ну і далі власне дані, відповідно до кількості байт в кожному стовпці.

Якщо ж у Вас немає подібного опису, то в мене підозра, що може бути опис логіки якоїсь гри і потрібно знайти коридор для обходу сторожа/боса/каменю/групового завдання/дверей в кімнату з епік шмотом/інше.
;)

13

Re: таблиця в бінарному коді

Дістав код як читати цей файл на IDL

PRO READING_SNAP, arg1, arg2

model=arg1 ;;  e.g. 'LCDM'
gr_nr=arg2 ;;  e.g. '092'

f_in = model+'_CoDECS_snap_'+gr_nr+'_zoom_1_0_0_0.dat'

openr,1,f_in

ntask=0

readu,1,ntask

print, 'ntask =', ntask
blockheader = 0L

for i=0,ntask-1 do begin

;;   print, 'i =', i

   readu,1,blockheader & print, blockheader
   ptemp=fltarr(3,blockheader)
   readu,1,ptemp
   readu,1,blockheader & print, blockheader
   
   if i eq 0 then begin
      xhalo=fltarr(blockheader) & xhalo(*)=ptemp(0,*)
      yhalo=fltarr(blockheader) & yhalo(*)=ptemp(1,*)
      zhalo=fltarr(blockheader) & zhalo(*)=ptemp(2,*)
   endif else begin
      xtemp=fltarr(blockheader) & xtemp(*)=ptemp(0,*)
      ytemp=fltarr(blockheader) & ytemp(*)=ptemp(1,*)
      ztemp=fltarr(blockheader) & ztemp(*)=ptemp(2,*)
      xhalo=[xhalo,xtemp]
      yhalo=[yhalo,ytemp]
      zhalo=[zhalo,ztemp]
   endelse

Але як це зробити на Python?

Подякували: 0xDADA11C71

14

Re: таблиця в бінарному коді

Підкажіть, будь ласка, з якої сторони підходити щоб прочитати той файл?

15

Re: таблиця в бінарному коді

зі сторони вивчення мови python і читання документації з IDL.

Подякували: HetmanNet2

16

Re: таблиця в бінарному коді

дивимося - перший байт вказує на кількість записів (заголовків) в файлі, 
далі перший байт заголовку вказує на кількість зірок в поточному записі, а нижченаведений код створює в пам’яті масив чисел з рухомою комою розміром 3×blockheader

ptemp=fltarr(3,blockheader)
Подякували: HetmanNet1

17

Re: таблиця в бінарному коді

0xDADA11C7 написав:

дивимося - перший байт вказує на кількість записів (заголовків) в файлі, 
далі перший байт заголовку вказує на кількість зірок в поточному записі, а нижченаведений код створює в пам’яті масив чисел з рухомою комою розміром 3×blockheader

ptemp=fltarr(3,blockheader)

Кількість зірок це ок.
Але чим розділені координати між собою, як знати де починається число з рухомою комою, а де закінчується?

18

Re: таблиця в бінарному коді

ги-ги, нема там такого, кажу ж - бінарний файл. розмір значення з рухомою комою сталий - 4 байти.

Подякували: HetmanNet1

19

Re: таблиця в бінарному коді

0xDADA11C7 написав:

ги-ги, нема там такого, кажу ж - бінарний файл. розмір значення з рухомою комою сталий - 4 байти.

Тобто значення підряд йдуть?
А чи є поняття нова стрічка в бінарному файлі?

20

Re: таблиця в бінарному коді

нема, науковець детектед :D

Подякували: koala, HetmanNet2