Fortran Programmieren

Hi,

ich habe folgendes Problem:
Ich soll zunächst ein Fortran-Programm schreiben, dass mir eine Datei auf meinem Rechner einließt. In der Datei sind 1001 Zahlen, wobei die erste Zahl die Anzahl der Zahlen ist(also 1000). Ich möchte jetzt, dass er mir alle 1000 Zahlen anzeigt.

Das hab ich bis jetzt:

Program Blub
implicit none
integer :: anzahl
real, dimension(1000) :: zahl
open(unit=20,file='c:\dateiname',status='old',action='read')
read(20,*) anzahl
write(20,*) anzahl
End Program Blub

Bis jetzt sollte er mir ja die erste Zahl anzeigen, weil ich noch keine anweisung gegeben habe, dass er nach der ersten Zahl die weitern anzeigen soll. Das ist mir klar, allerdings poppt nur kurz die Eingabeaufforderung auf, und verschwindet dann auch gleich wieder.
ich dachte mit dem "write(20,*) anzahl" bleibt das Eingabeaufforderungsfenster geöffnet?
 
Zuletzt bearbeitet:
Auch wenn ich selbst noch nie mit Fortran gearbeitet habe, würde es mich wundern, wenn nach einer normalen Bildschirmausgabe direkt noch eine automatische Pause eingefügt wird.
Versuch mal, das Programm aus einer Eingabeaufforderung heraus zu starten oder füge alternativ einen Pause-Befehl (bzw. einen anderen beliebigen Befehl, welcher auf Nutzereingaben wartet) ein.

PS: Ich nehme an, die Fehler in der open-Zeile sind durch das Kopieren entstanden (fehlendes Hochkomma und Leerzeichen in action)?
 
Auch wenn ich selbst noch nie mit Fortran gearbeitet habe, würde es mich wundern, wenn nach einer normalen Bildschirmausgabe direkt noch eine automatische Pause eingefügt wird.
Versuch mal, das Programm aus einer Eingabeaufforderung heraus zu starten oder füge alternativ einen Pause-Befehl (bzw. einen anderen beliebigen Befehl, welcher auf Nutzereingaben wartet) ein.

PS: Ich nehme an, die Fehler in der open-Zeile sind durch das Kopieren entstanden (fehlendes Hochkomma und Leerzeichen in action)?

Danke für die Antwort. Ja, die Fehler sind durch das Kopieren entstanden. Ich versteh nicht, was du mit "Pause-Befehl" meinst.
Da ich mit Force 2.0 programmiere mache ich eigentlich nichts mit der Eingabeaufforderung. D.h ich schreibe in dem Programm und kann es darüber gleichzeitig kompilieren lassen.
 
Hab gerade keinen compiler aber probiers ma so(als zeichenkette gelesen):

Code:
Program Blub
implicit none
integer :: stat
character(1001) :: zahlen
!real, dimension(1000) :: zahl 
open(unit=20,file='c:\dateiname',status='OLD',action='read',iostat=stat)
  if(stat == 0) then
    write(*,*) 'success file opend!'
    do      
      read(20, '(A)', iostat=stat) zahlen
      ! if EOF stat /= 0 
      if (stat /= 0) exit
      write(*,*) zahlen
      PAUSE
    end do  
  else 
    write(*,*) 'Open failed...'
  end if
close(20)
End Program  Blub

Sonst vielleicht hiermit rumbasteln: https://srv.rz.uni-bayreuth.de/lehre/fortran90/vorlesung/V04/lesen.f90
 
Zuletzt bearbeitet:
Danke für die guten Antworten. Ich habe jetzt allerdings immernoch das Problem, dass die Eingabeaufforderung sofort wieder verschwindet.
Sowohl bei dem was auf der Uni Bayreuth Internetseite steht als auch bei dem was Vyger gepostet hat.
Was bedeutet eigentlich das '(A)' in
read(20, '(A)', iostat=stat) zahlen ?
Das Kompilieren ergab außerdem folgenden Fehler: "Warning: Deleted feature: PAUSE statement at (1)"
 
Zuletzt bearbeitet:
Versuch mal, mit der Eingabeaufforderung zu dem Pfad zu navigieren, wo deine ausführbare Datei liegt (cd /d PFAD) und dann einfach den Dateinamen einzugeben zum ausführen.

Meine Idee von oben war es, dass nach der Ausgabe der Zeilen eben keine automatische Pause eingefügt wird, so dass die Zeilen ausgegeben werden (die Konsole ist sichtbar) und das Programm sich direkt danach beendet (die Konsole verschwindet). Wenn du es stattdessen über die Eingabeaufforderung laufen lässt, bleibt auch die Konsole offen.
 
Na dann kannst Du ja jetzt weiterforschen, warum Deine Datei nicht zugreifbar ist.

Dafür hier ein kleines Mischmasch mit dem Bayreuter, um an die Fehlernummer zu kommen (siehe Else):

Code:
Program Blub
implicit none
integer :: stat
character(1001) :: zahlen
!real, dimension(1000) :: zahl 
open(unit=20,file='c:\dateiname',status='OLD',action='read',iostat=stat)
  if(stat == 0) then
    write(*,*) 'success file opend!'
    do      
      read(20, '(A)', iostat=stat) zahlen
      ! if EOF stat /= 0 
      if (stat /= 0) exit
      ! soll natuerlich nicht (20,*) sein sondern (*,*)...
      write(*,*) zahlen
      PAUSE 'This should be a pause statement'
    end do  
  else 
   write(*,*) 'Beim OEffenen der Datei ist ein Fehler Nr.', & 
     stat,' aufgetreten' 
  end if
close(20)
End Program  Blub

Edit: Das (A) steht für das was Du aus der Datei einlesen willst, in dem Fall einen String/Zeichenkette("best compatibility" :D).
Sonst gern auch mal Literatur dazu: http://de.wikibooks.org/wiki/Fortran:_Fortran_95:_Ein-_und_Ausgabe#Formatlistenelemente
 
Zuletzt bearbeitet:
Also mittlerweile habe ich beschlossen, die Datei mittels der der Eingabeaufforderung einzulesen.

Program U2
implicit none
integer :: i !Zählvariable
integer :: nv !Anzahl (n) der Geschwindigkeiten (v)
real, dimension (1000) :: v
read (*,*) nv
write (*,*) nv
do i=1,nv
read (*,*) v
write (*,*) v
enddo
End Program U2

Wenn ich das jetzt compiliere, sehe ich die ganzen Werte. Allerdings steht am Ende " At line 9 of file "Pfad" <unit=5, file = 'stdin'> Fortran runtime errror: End of file

Nun soll ich weiter die Summe bzw den Mittelwert ueber alle Daten berechnen. Hier habe ich was gefunden https://srv.rz.uni-bayreuth.de/lehre/fortran90/vorlesung/V03/statistik.f90. Das gleiche muss ich eigentlich auch machen. Aber ich weiß nicht was ich umändern muss, damit die Daten die vorher eingelesen wurden nun zur Berechnung der Summe/des Mittelwertes benutzt werden.
 
Zurück
Oben