Fortran - wyjście pliku wejściowego

Fortran umożliwia odczytywanie i zapisywanie danych w plikach.

W ostatnim rozdziale widziałeś, jak odczytywać i zapisywać dane w terminalu. W tym rozdziale zapoznasz się z funkcjami wprowadzania i wyprowadzania plików udostępnianymi przez Fortran.

Możesz czytać i zapisywać w jednym lub wielu plikach. Instrukcje OPEN, WRITE, READ i CLOSE pozwalają to osiągnąć.

Otwieranie i zamykanie plików

Przed użyciem pliku należy go otworzyć. PlikopenPolecenie służy do otwierania plików do odczytu lub zapisu. Najprostszą formą polecenia jest -

open (unit = number, file = "name").

Jednak otwarte oświadczenie może mieć ogólną formę -

open (list-of-specifiers)

W poniższej tabeli opisano najczęściej używane specyfikatory -

Sr.No Specyfikator i opis
1

[UNIT=] u

Numer jednostki u może być dowolną liczbą z zakresu 9-99 i wskazuje plik, możesz wybrać dowolną liczbę, ale każdy otwarty plik w programie musi mieć unikalny numer

2

IOSTAT= ios

Jest to identyfikator stanu We / Wy i powinien być zmienną całkowitą. Jeśli instrukcja open powiedzie się, zwrócona wartość ios jest równa zero, w przeciwnym razie jest wartością niezerową.

3

ERR = err

Jest to etykieta, do której sterowanie przechodzi w przypadku jakiegokolwiek błędu.

4

FILE = fname

Nazwa pliku, ciąg znaków.

5

STATUS = sta

Pokazuje poprzedni stan pliku. Ciąg znaków i może mieć jedną z trzech wartości NOWY, STARY lub SCRATCH. Plik magazynowy jest tworzony i usuwany po zamknięciu lub zakończeniu programu.

6

ACCESS = acc

Jest to tryb dostępu do plików. Może mieć jedną z dwóch wartości: SEQUENTIAL lub DIRECT. Wartość domyślna to SEKWENCYJNA.

7

FORM = frm

Podaje stan formatowania pliku. Może mieć jedną z dwóch wartości FORMATTED lub UNFORMATTED. Wartość domyślna to UNFORMATTED

8

RECL = rl

Określa długość każdego rekordu w pliku o bezpośrednim dostępie.

Po otwarciu pliku uzyskuje się do niego dostęp za pomocą instrukcji odczytu i zapisu. Po zakończeniu należy go zamknąć za pomocąclose komunikat.

Instrukcja close ma następującą składnię -

close ([UNIT = ]u[,IOSTAT = ios,ERR = err,STATUS = sta])

Należy pamiętać, że parametry w nawiasach są opcjonalne.

Example

Ten przykład demonstruje otwieranie nowego pliku do zapisywania niektórych danych w pliku.

program outputdata   
implicit none

   real, dimension(100) :: x, y  
   real, dimension(100) :: p, q
   integer :: i  
   
   ! data  
   do i=1,100  
      x(i) = i * 0.1 
      y(i) = sin(x(i)) * (1-cos(x(i)/3.0))  
   end do  
   
   ! output data into a file 
   open(1, file = 'data1.dat', status = 'new')  
   do i=1,100  
      write(1,*) x(i), y(i)   
   end do  
   
   close(1) 
   
end program outputdata

Kiedy powyższy kod jest kompilowany i wykonywany, tworzy plik data1.dat i zapisuje w nim wartości tablicy x i y. A następnie zamyka plik.

Czytanie zi zapisywanie do pliku

Instrukcje odczytu i zapisu są używane odpowiednio do odczytu i zapisu do pliku.

Mają następującą składnię -

read ([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)
write([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)

Większość specyfikatorów została już omówiona w powyższej tabeli.

Specyfikator END = s jest etykietą instrukcji, do której program przeskakuje, gdy osiągnie koniec pliku.

Example

Ten przykład ilustruje odczytywanie zi zapisywanie do pliku.

W tym programie czytamy z pliku, który stworzyliśmy w ostatnim przykładzie data1.dat i wyświetlamy go na ekranie.

program outputdata   
implicit none   

   real, dimension(100) :: x, y  
   real, dimension(100) :: p, q
   integer :: i  
   
   ! data  
   do i = 1,100  
      x(i) = i * 0.1 
      y(i) = sin(x(i)) * (1-cos(x(i)/3.0))  
   end do  
   
   ! output data into a file 
   open(1, file = 'data1.dat', status='new')  
   do i = 1,100  
      write(1,*) x(i), y(i)   
   end do  
   close(1) 

   ! opening the file for reading
   open (2, file = 'data1.dat', status = 'old')

   do i = 1,100  
      read(2,*) p(i), q(i)
   end do 
   
   close(2)
   
   do i = 1,100  
      write(*,*) p(i), q(i)
   end do 
   
end program outputdata

Kiedy powyższy kod jest kompilowany i wykonywany, daje następujący wynik -

0.100000001  5.54589933E-05
0.200000003  4.41325130E-04
0.300000012  1.47636665E-03
0.400000006  3.45637114E-03
0.500000000  6.64328877E-03
0.600000024  1.12552457E-02
0.699999988  1.74576249E-02
0.800000012  2.53552198E-02
0.900000036  3.49861123E-02
1.00000000   4.63171229E-02
1.10000002   5.92407547E-02
1.20000005   7.35742599E-02
1.30000007   8.90605897E-02
1.39999998   0.105371222    
1.50000000   0.122110792    
1.60000002   0.138823599    
1.70000005   0.155002072    
1.80000007   0.170096487    
1.89999998   0.183526158    
2.00000000   0.194692180    
2.10000014   0.202990443    
2.20000005   0.207826138    
2.29999995   0.208628103    
2.40000010   0.204863414    
2.50000000   0.196052119    
2.60000014   0.181780845    
2.70000005   0.161716297    
2.79999995   0.135617107    
2.90000010   0.103344671    
3.00000000   6.48725405E-02
3.10000014   2.02930309E-02
3.20000005  -3.01767997E-02
3.29999995  -8.61928314E-02
3.40000010  -0.147283033    
3.50000000  -0.212848678    
3.60000014  -0.282169819    
3.70000005  -0.354410470    
3.79999995  -0.428629100    
3.90000010  -0.503789663    
4.00000000  -0.578774154    
4.09999990  -0.652400017    
4.20000029  -0.723436713    
4.30000019  -0.790623367    
4.40000010  -0.852691114    
4.50000000  -0.908382416    
4.59999990  -0.956472993    
4.70000029  -0.995793998    
4.80000019  -1.02525222    
4.90000010  -1.04385209    
5.00000000  -1.05071592    
5.09999990  -1.04510069    
5.20000029  -1.02641726    
5.30000019  -0.994243503    
5.40000010  -0.948338211    
5.50000000  -0.888650239    
5.59999990  -0.815326691    
5.70000029  -0.728716135    
5.80000019  -0.629372001    
5.90000010  -0.518047631    
6.00000000  -0.395693362    
6.09999990  -0.263447165    
6.20000029  -0.122622721    
6.30000019   2.53026206E-02
6.40000010   0.178709000    
6.50000000   0.335851669    
6.59999990   0.494883657    
6.70000029   0.653881252    
6.80000019   0.810866773    
6.90000010   0.963840425    
7.00000000   1.11080539    
7.09999990   1.24979746    
7.20000029   1.37891412    
7.30000019   1.49633956    
7.40000010   1.60037732    
7.50000000   1.68947268    
7.59999990   1.76223695    
7.70000029   1.81747139    
7.80000019   1.85418403    
7.90000010   1.87160957    
8.00000000   1.86922085    
8.10000038   1.84674001    
8.19999981   1.80414569    
8.30000019   1.74167395    
8.40000057   1.65982044    
8.50000000   1.55933595    
8.60000038   1.44121361    
8.69999981   1.30668485    
8.80000019   1.15719533    
8.90000057   0.994394958    
9.00000000   0.820112705    
9.10000038   0.636327863    
9.19999981   0.445154816    
9.30000019   0.248800844    
9.40000057   4.95488606E-02
9.50000000  -0.150278628    
9.60000038  -0.348357052    
9.69999981  -0.542378068    
9.80000019  -0.730095863    
9.90000057  -0.909344316    
10.0000000  -1.07807255