Ich habe ein bestimmtes Stück Code in Fortran. Der Code nimmt 'pq' als eine Eingabe von dem Benutzer und ist ein einzelner Punkt. Anstatt dies zu tun, möchte ich eine Reihe von Punkten 'pq' aus einer Datei points.txt lesen und sie für diese Anzahl von Punkten ausführen, anstatt nur eine einzige Benutzereingabe. Ist es möglich? Der Code lautet wie folgt:Rufen Sie ein Unterprogramm für eine Liste von Punkten anstelle eines einzelnen Punktes
program prop
use module
implicit none
character(len=80) :: ErrorMsg
character(2) :: xy
real(8) :: Conc(20) = 0.d0
character(len=20) :: fn, fl
real(8) :: Mmolar, Tcritical, Pcritical, Tmininimum, Tmaximum, x, y
call Init_module()
write(*,*) 'Insert the gas name:'
read(*,*) fn
write(*,*) 'Insert the gas library:'
read(*,*) fl
write(*,*) 'Insert the copule pq:'
read(*,*) pq
write(*,*) 'Insert the value of ', pq(1:1)
read(*,*) x
write(*,*) 'Insert the value of ', pq(2:2)
read(*,*) y
write(*,*) 'Pres = ', Pres(pq, x, y, ErrorMsg)
write(*,*) 'Temp = ', Temperature(pq, x, y, ErrorMsg)
call ReleaseObjects()
end program prop
Statt Lesen pq als ein einzelnen Punkt x, y von dem Benutzer in dem obigen Code, ich möchte eine Reihe von Punkten aus datei.txt lesen, zum Beispiel 50 Punkte und Führen Sie dann Subroutinen Pres und Temperature aus. Jede Zeile der Datei enthält einen Punkt x, y und x und y in jeder Zeile sind durch ein paar Leerzeichen voneinander getrennt. Die ersten paar Zeilen datei.txt sind:
Ts
500
0.04781564 159.81587875
0.20396084 165.46398084
0.08159885 166.81382894
0.03879184 164.17497877
0.12585959 165.37000305
0.09895530 165.95997769
0.10389518 170.74235496
Zu beachten ist, dass die Länge und die Zeichen der schwebenden Zahlen variieren kann. Die Datei.txt wird ursprünglich durch Python mit der Formatierung für x geschrieben, wobei y '%-12.8f %-12.8f\n'%
ist. Ich habe den folgenden Code zu versuchen, die Datei zu lesen, aber ich bin nicht in der Lage von der 3. Zeile ab zu lesen:
real, allocatable :: x(:),y(:)
integer :: np
open(12,file=trim('file.txt'),status='old', &
access='sequential', form='formatted', action='read')
read(12,*)pq
write(*,*)'pq:', pq
read(12,*)np
write(*,*)'number of points:',np
allocate (x(np))
allocate (y(np))
do i=1,np
read(12,*)x(i),y(i)
write(*,*)x(i),y(i)
enddo
Sie könnten wissen, wie sie Schleifen und Arrays in modernen Programmiersprachen nennen. Das sind deine Freunde für solche Sachen. Aber inzwischen ist 'modul' ein Schlüsselwort in fortran 90 und darüber, also wollen Sie kein eigenes Modulmodul nennen. – innoSPG
@innoSPG Ordentlich vermerkt. Allerdings bin ich vertraut mit Arrays und Schleifen, war nur unsicher, wie man sie für Fortran implementieren, ich bin neu für Fortran. Danke für die Information. – Aspro