Я редактирую фортран 90 для чтения файла. Конкретный файл оказался «загрязненным» некоторой дополнительной информацией, поэтому я хотел попытаться прочитать, а затем перемотать назад; перечитай, если ошибся:
open(filenum,file=filename,form="unformatted",iostat=ierr) //'direct' access
...lots of stuff...
here = ftell(filenum)
read(filenum,iostat=ierr) var1, var2 //try reading as var1, var2
if(iswrong(var1, var2)) then //check if correct
call fseek(filenum,here-ftell(filenum),1) //rewind
read(filenum,iostat=ierr) vara, varb, varc //read as different type
endif
Однако, когда я компилирую эту программу, я получаю
Undefined symbols:
"_fseek_", referenced from:
___myreader__subroutine_name in myreader.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
(Я пытаюсь скомпилировать на gfortran (i686-apple-darwin8-gfortran-4.2)). Я понимаю, что fseek
не является стандартной подпрограммой Фортрана.
Интересно, есть ли альтернатива. Я понимаю, что могу сделать что-то вроде read(filenum,rec=somevalue)
, но как я могу использовать это подобным образом? Я также подумал попробовать прочитать с read(,advance='no')
для проверки, а затем снова прочитать с advance='yes'
, если он в правильном формате, но для этого требуется определенное выражение формата, которое не указано. Спасибо.