Импортиране - Импортиране на неформатиран двоичен Fortran - CiupaCabra
Имам неформатиран двоичен файл, генериран с помощта на Compaq Visual Fortran компилатор (голям ендиан).
Ето какво пише за документацията:
Двоичният файл е написан в общ формат, състоящ се от матрица от данни, задвижван от дескрипторен запис:
- 8-символна ключова дума, която идентифицира данните в блока.
- Целочислен брой байтови сигнали, които определят броя на елементите в блока.
- Ключова дума от 4 знака, която определя типа данни. (ИНТЕ, РЕАЛНО, ЛОГИ, ДВОЙНО>
Елементите на заглавката се четат като един запис. Данните следват дескриптора в нов запис. Числовите матрици са разделени на блокове с до 1000 елемента. Размерът на физическия запис е същият като размера на блока.
Допълнителна информация за ключовите думи:
- SEQHDR - 1 елемент - INTE - Заглавие на последователност, със стойност на данните. Ако присъства число, това е кодирано цяло число, съответстващо на времето на създаване на файла.
- MINISTEP - 1 артикул - INTE - Номерът на министеп е по същество номерът на данните (напр. Psi на ден 1)
- PARAMS - n елементи - REAL - Векторен параметър при минимална стойност.
Опити за четене на такива данни в Mathematica, включително Import

покажете ми разпознаваем текст, но няма полезни цифрови стойности.
Въпросен файл е достъпен тук.
Mathematica е в състояние да анализира този тип файлове и ако е така, кой е най-добрият начин?
2 отговора
Изглежда, че файлът е унифициран резюме от Schlumberger Eclipse Reservoir Simulator. Този файлов формат използва кодиране на запис с променлива дължина Compaq Visual Fortran.
Mathematica не предлага вградена функционалност за четене на този файлов формат, така че ще трябва да го анализираме сами.
Започваме с дефиниране на удобна функция за четене на двоични данни от голям край от файл:
Логическите записи във файловете на Eclipse са от две части: заглавката и данните. Следната функция чете заглавката:
Дължините на записа на дължината на записа и дължината на CVF се пропускат, оставяйки ключовата дума на записа, броя на елементите от данни и типа на елемента от данни. Всеки тип елемент изисква специално боравене:
Този код се занимава само с цели числа (INTE) и реални данни (REAL), въпреки че би било лесно да се разшири това, за да се третират и други типове. readEclElements се използва във всеки случай за четене на необходимия брой елементи от данни - които могат да включват няколко променливи записа:
Тези помощни функции се използват за четене на пълна двойка заглавка/данни:
Остава само да отворите файла, да прочетете всички записи и да затворите файла:
Ето readEclFile в действие, чете предоставения файл с данни (ако файлът се намира в същата директория като бележника):
Не знам кодирането на времето, използвано в записите SEQHDR .
Предупреждение: Нямам връзка с Schlumberger.