Соответствует ли Fortran 77 POSIX? - записывать двоичные файлы - PullRequest
2 голосов
/ 14 апреля 2009

Я пытаюсь записать двоичные файлы данных с фортрана, но я нахожу, что обычные файловые интерфейсы очень ограничивают, мне интересно, есть ли у Фортрана функции, соответствующие POSIX.

Я нашел этот стандарт: IEEE 1003.9-1992 , но я не знаю, полностью ли он поддерживается большинством распространенных компиляторов (или если мне нужно активировать какие-либо флаги). Я не могу найти практическую информацию, можете ли вы дать мне какие-либо предложения?

Кстати, я пытаюсь написать файлы изображений, сначала я хочу попробовать с tga / pgm . Также я не хочу добавлять какую-либо зависимость от внешних библиотек, спасибо!

Решение:

Наконец я смог написать ppm файлов , и мне пришлось избегать печати новой строки в конце внутреннего цикла, окончательный код выглядит так:

      subroutine imgwrite()
      implicit none
*     ******************************************************************
      include 'image.f'
*     ******************************************************************
      integer x, y, i

      write(imgunit, '(A)') 'P3'
      write(imgunit, '(I4)') imgwidth
      write(imgunit, '(I4)') imgheight
      write(imgunit, *) 255

      do 10 y=1, imgheight
        do 20 x=1,imgwidth
          write(imgunit,100) (int(imgpixels(x,y,i)*255D0), i=1,3)
20      continue
        write(imgunit,110)
10    continue


100   FORMAT(3(I4),$)
110   FORMAT((/))

      return
      end

Никто не предоставил никакой информации о POSIX на Фортране.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 14 апреля 2009

TGA - это очень простой формат, хотя он является двоичным, поэтому его можно написать из FORTRAN. Однако я не хотел бы пытаться использовать TIFF, PNG, GIF или JPG в FORTRAN без помощи внешних библиотек.

Вы можете обнаружить, что один из семейств форматов netpbm проще в написании, и они могут быть легко преобразованы в TGA или любой другой формат, который вам может понадобиться для отображения или дальнейшей обработки с помощью простых команд. Форматы PBM включают как чистый ASCII, так и двоичные варианты, поэтому они могут быть записаны (хотя и очень неэффективно), даже если доступ к двоичным файлам проблематичен. Набор инструментов включает в себя преобразование примерно в 100 других форматов графических файлов.

Редактировать: Извините, что не могу быть более полезным в том, как на самом деле писать файлы из FORTRAN, но перфокарты были обычным явлением, когда я последний раз использовал язык. ; -)

0 голосов
/ 31 июля 2009

Проблема с чтением и записью двоичных файлов, случайных или последовательных, для использования другими языками состоит в том, что система fortran io использует в файле другую информацию. Я не могу вспомнить, чтобы это было в стандарте f77, но, конечно, большинство компиляторов pc и unix сделали это.

Например, при записи в двоичный последовательный файл

write(bsf) doublevariable, realvariable

тогда файл будет содержать (если бы вы могли читать двоичный файл)

12<value of double><value of real>12

Каждая запись имеет маркеры записи, которые представляют собой длину в байтах того, что было записано в начале и в конце. Это необходимо, потому что каждая запись может иметь разную длину и при чтении не нужно читать все, что было написано для записи. Например, если вы читаете выше, у вас может быть

read(bsf) doublevariable

Следующее чтение bsf должно быть в начале следующей записи.

Таким образом, чтение или запись двоичных файлов для совместного использования с другими языками должно осуществляться через библиотеку, написанную на C, или любой другой язык, который не выполняет то, что делает Fortran,

...