![]() |
|
![]() ![]() ![]() |
|
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Существуют какие-либо макросы?
|
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
А что такое "файл Fortran binary"?
|
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Может файл данных записанный из Фортран-программы c FORM = UNFORMATED или BINARY переписать в текстовый?
|
|||
|
||||
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Да. Какая программа для этого нужна? |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
||||
|
||||
ertttttt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 31.8.2010 Репутация: нет Всего: нет |
Фантом,
Программу написали. При чтении методом open не читает неформатированный файл. Не понятно как сконвертировать файл Fortran binary в ASCII текст. Как это можно сделать?
Это сообщение отредактировал(а) kemiisto - 31.8.2010, 11:34 |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
ertttttt, а можно примерчик файла. Расширение у него до боли знакомое...
А с чего вообще взяли, что это
? -------------------- |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 5 Всего: 49 |
Так ведь какой-то формат для чтения нужен, обойтись чтением под управлением списка в данном случае нельзя. Вам нужно знать формат, в котором эти данные записаны, в противном случае их можно интерпретировать как угодно (и в самом файле эта информация не содержится). |
|||
|
||||
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Файл прикрепил. Это файл линий тока в программе Schlumberger Eclipse. В мануале про него написано, что его можно перевести в ASCII text в Compact Visual Fortran методом open: Programmers using Compaq Visual Fortran, who wish to read 98A and later PC binary files will need to use CONVERT=’BIG_ENDIAN’ when they open an unformatted file, for example.: OPEN(UNIT=IUNIT,FILE=ZFILE,FORM=’UNFORMATTED’,CONVERT=’BIG_ENDIAN’) ... Output files may be formatted (ASCII text) or unformatted (Fortran binary). Это сообщение отредактировал(а) Mormishka - 31.8.2010, 15:39 Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Когда читаем из/пишем в unformatted файл, то, естественно, ни о каких форматах чтения/записи речи идти не может. А у Вас READ(12, *). А * эта, между прочим, специфицирует формат ввода/вывода. Фантом писал об этом.
Ну и (опять таки Фантом писал об этом), нужно знать что и в какой последовательности писалось в файл, чтобы считать. Это сообщение отредактировал(а) kemiisto - 31.8.2010, 16:20 -------------------- |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Наверное в мануале написано, в каком виде они там записывались - в виде массива конкретной формы (и типа) или в цикле отдельными записями, состоящими из строк массива и/или отдельных чисел определенных типов? Скорее всего второе, но, как уже отмечалось, нужно знать чего (т.е. какого типа и параметра разновидности ) и сколько чисел в записи - ведь один и тот же набор двоичой информации по-разному интерпретируется для разных типов. |
|||
|
||||
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
FCM,
Наверное вы это имеете ввиду? Output files are written in a general format which consists of data arrays, each headed by a data descriptor record. The header record consists of: • An 8-character keyword which identifies the data in the block. Valid keywords are described in the following chapters. Where appropriate, the keyword may be a property, region or solution name. Use of names containing embedded blanks is not recommended. • A 4-byte integer defining the number of elements in the block. • A 4-character keyword defining the type of data in the block. Possible types are: INTE standard (4 byte) integers REAL single precision (4 byte) floating point reals LOGI standard (4 byte) logicals DOUB double precision (8 byte) floating point reals CHAR characters (handled as 8-character words) C0nn CHARACTER*nn strings (e.g. C065 for 65-character strings) If the file is unformatted, the three header items are read as a single physical record. If the file is formatted, the following Fortran format is used: (1X, 1X, A8, 1X, 1X, I11, 1X, 1X, A4) In ECLIPSE formatted output files, the character strings are surrounded by single quotes for readability. The data contents follow the descriptor (starting on a new record). Numerical arrays are divided into blocks of up to 1000 items each. Character data are divided blocks of up to 105 8-character words each. For unformatted files, the physical record size is the same as the block size. Formatted files consist of 80-character physical records, read using the following Fortran formats: Integer 6(1X, I11) Real 4(1X, E16.8) Logical 25(1X, L2) Double Precision 3(1X, D22.14) Character 7(1X, 1X, A8, 1X) Character*nn (1X, 1X, Ann, 1X), repeated if possible within 80 characters In ECLIPSE formatted output files, the 8-character words are surrounded by single quotes for readability. Note that multidimensional arrays are ordered according to the Fortran convention, with the left-hand index increasing fastest. For example, in a full array of cell values for a grid with dimensions NX*NY*NZ, the position of cell (IX,IY,IZ) would be given by: ICELL = (IZ-1)*NX*NY + (IY-1)*NX + IX |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Навскидку, сделаем черновой прогон
В результате получим вывод (проверьте!) INTEHEAD 10 INTE ... GEOMETRY 26460 DOUB .... GEOMINDX 238 INTE ... ID_BEG 237 INTE ... ID_END 237 INTE ... ID_CELL 8583 INTE ... TIME_BEG 8820 DOUB ... SWAT 8583 DOUB ... Т.е. в чистовом прогоне нужно последовательно считывать chname,num,chtype (как единую запись) и следующие за ними массивы из num -чисел chtype-типа (скорее всего как единую запись). |
|||
|
||||
Mormishka |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 25.8.2010 Репутация: нет Всего: нет |
Попробую. Вот образец другого файла в мануале в ASCII text
INTEHEAD 10 INTE 2 1 3 1 20 10 1997 23 50 41 GEOMETRY 42 DOUB 25. 24. 2000. 20. 23. 2000. 13. 20. 2000. 10. 17. 2000. 8. 14. 2000. 6. 10. 2000. 5. 5. 2000. 25. 24. 2000. 22. 20. 2000. 20. 15. 2000. 15. 10. 2000. 14. 9. 2000. 10. 7. 2000. 5. 5. 2000. GEOMINDX 3 INTE 1 22 43 ID_BEG 2 INTE 2 2 ID_END 2 INTE 1 1 ID_CELL 12 INTE 9 8 5 4 4 1 9 6 5 2 2 1 TIME_BEG 14 DOUB 4.2333 7.33 18.84 24.7 29.13 34.25 41. 4. 7. 17.84 20.7 23.3300 31.05 40. SWAT 12 DOUB 0.75 0.575 0.5 0.4 0.225 0.05 0.5 0.575 0.4 0.3 0.225 0.35 GEOMETRY 15 DOUB 30. 5. 2000. 20. 4. 2000. 26. 3. 2000. 10. 2. 2000. 5. 5. 2000. GEOMINDX 2 INTE 1 16 ID_BEG 1 INTE 3 ID_END 1 INTE 1 ID_CELL 4 INTE 3 2 2 1 TIME_BEG 5 DOUB 4.2333 7.3300 18.8400 24.7000 29.1300 SWAT 4 DOUB 0.7500 0.5750 0.5000 0.4000 |
|||
|
||||
ertttttt |
|
|||
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 31.8.2010 Репутация: нет Всего: нет |
Первые три числа прочитал. Дальше не хочет читать. Здесь другой файл этого же типа. Я поменял название на «x.s». Для меня пока важно вывести на экран, что идет после ключевого слова GEOMETRY. В данном файле после GEOMETRY идет число 162, т.е. всего 162 числа должно быть.
program Convert implicit none integer i real(8) ::r1 real(8) ::r2 real(8) ::r3 character(8) :: chname integer(4) :: num character(4) :: chtype open(unit=777, file='x.s', form='unformatted',convert='big_endian', action='read') do read (777) chname, num, chtype write(*,*) chname, num, chtype if (chname=='GEOMETRY') then do i=1,num read (777) r1,r2,r3 write(*,*) r1,' ',r2,' ' ,r3,' ',i, ' ' ,num enddo end if enddo end program Convert На экране: INTEHEAD 10 INTE ☻ ☺ 3 ♥ GEOMETRY 162 DOUB 450.000000000000 450.000000000000 2025.00000000000 1 162 forrtl: severe (67): input statement requires too much data, unit 777, file C:\P rogram Files\Microsoft Visual Studio\MyProjects\Proect\Debug\x.s |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |