Nigdy nie użyłem dostępu sekwencyjnego z niesformatowanym wyjściem z tego powodu. Jednak zależy to od aplikacji, a czasami wygodnie jest mieć wskaźnik długości rekordu (szczególnie w przypadku danych niestrukturalnych). Zgodnie z sugestią firmy steabert w dokumencie Looking at binary output from fortran on gnuplot można tego uniknąć, używając argumentu słowa kluczowego ACCESS = 'DIRECT'
, w którym to przypadku należy określić długość rekordu. Ta metoda jest wygodna do wydajnego przechowywania dużych wielowymiarowych danych strukturalnych (stała długość rekordu). Poniższy przykład zapisuje plik niesformatowany, którego wielkość jest równa wielkości tablicy:
REAL(KIND=4),DIMENSION(10) :: a = 3.141
INTEGER :: reclen
INQUIRE(iolength=reclen)a
OPEN(UNIT=10,FILE='direct.out',FORM='UNFORMATTED',&
ACCESS='DIRECT',RECL=reclen)
WRITE(UNIT=10,REC=1)a
CLOSE(UNIT=10)
END
Zauważ, że to nie jest idealne aproach w sensie przenośności. W niesformatowanym pliku napisanym z bezpośrednim dostępem nie ma informacji o wielkości każdego elementu. Plik tekstowy readme, który opisuje rozmiar danych, sprawia, że zadanie jest dla mnie w porządku, a ja wolę tę metodę zamiast wypełniania w trybie sekwencyjnym.
Zmieniono tytuł, ponieważ nie podoba mi się mylące użycie tego terminu - "binarny". Binary oznacza podstawę 2, która nie jest bezpośrednio związana z twoim problemem. Prawie wszystko na twoim komputerze jest binarne, na pewnym poziomie. Jest to powszechny termin w dzisiejszych czasach, ale "niesformatowany" Fortran jest o wiele bliższy. – Rook
Kilka użytecznych informacji dotyczących strumienia ... http://www.star.le.ac.uk/~cgp/streamIO.html – Rook
wydaje się być duplikatem http://stackoverflow.com/questions/8751154/ patrząc na binarne wyjście z Fortran-on-gnuplot, czy mógłbyś nie zadawać więcej pytań? – steabert