Импортиране - Импортиране на неформатиран двоичен Fortran - CiupaCabra

Имам неформатиран двоичен файл, генериран с помощта на Compaq Visual Fortran компилатор (голям ендиан).

Ето какво пише за документацията:

Двоичният файл е написан в общ формат, състоящ се от матрица от данни, задвижван от дескрипторен запис:

  1. 8-символна ключова дума, която идентифицира данните в блока.
  2. Целочислен брой байтови сигнали, които определят броя на елементите в блока.
  3. Ключова дума от 4 знака, която определя типа данни. (ИНТЕ, РЕАЛНО, ЛОГИ, ДВОЙНО>

Елементите на заглавката се четат като един запис. Данните следват дескриптора в нов запис. Числовите матрици са разделени на блокове с до 1000 елемента. Размерът на физическия запис е същият като размера на блока.

Допълнителна информация за ключовите думи:

  1. SEQHDR - 1 елемент - INTE - Заглавие на последователност, със стойност на данните. Ако присъства число, това е кодирано цяло число, съответстващо на времето на създаване на файла.
  2. MINISTEP - 1 артикул - INTE - Номерът на министеп е по същество номерът на данните (напр. Psi на ден 1)
  3. PARAMS - n елементи - REAL - Векторен параметър при минимална стойност.

Опити за четене на такива данни в Mathematica, включително Import

импортиране

покажете ми разпознаваем текст, но няма полезни цифрови стойности.

Въпросен файл е достъпен тук.

Mathematica е в състояние да анализира този тип файлове и ако е така, кой е най-добрият начин?

2 отговора

Изглежда, че файлът е унифициран резюме от Schlumberger Eclipse Reservoir Simulator. Този файлов формат използва кодиране на запис с променлива дължина Compaq Visual Fortran.

Mathematica не предлага вградена функционалност за четене на този файлов формат, така че ще трябва да го анализираме сами.

Започваме с дефиниране на удобна функция за четене на двоични данни от голям край от файл:

Логическите записи във файловете на Eclipse са от две части: заглавката и данните. Следната функция чете заглавката:

Дължините на записа на дължината на записа и дължината на CVF се пропускат, оставяйки ключовата дума на записа, броя на елементите от данни и типа на елемента от данни. Всеки тип елемент изисква специално боравене:

Този код се занимава само с цели числа (INTE) и реални данни (REAL), въпреки че би било лесно да се разшири това, за да се третират и други типове. readEclElements се използва във всеки случай за четене на необходимия брой елементи от данни - които могат да включват няколко променливи записа:

Тези помощни функции се използват за четене на пълна двойка заглавка/данни:

Остава само да отворите файла, да прочетете всички записи и да затворите файла:

Ето readEclFile в действие, чете предоставения файл с данни (ако файлът се намира в същата директория като бележника):

Не знам кодирането на времето, използвано в записите SEQHDR .

Предупреждение: Нямам връзка с Schlumberger.