2016-08-05 39 views
0

Ich habe folgende Code versucht, in Temperaturwerte aus einer Binärdatei zu lesen. Ich glaube, es ist zweidimensional, aber ich bin mir nicht sicher. Und ich kenne die genauen Dimensionen nicht. Der Fehler, den ich bekomme, sagt: zu wenig Indizes für das Array 'temp' angegeben.Fehler: Zu wenige Indizes für für Array angegeben

INTEGER :: i, j 
REAL, DIMENSION(:,:), ALLOCATABLE :: temp 

OPEN(UNIT=8, FILE='Orbital_TB_bufr_v620.dat', IOSTAT=iostat) 
READ(unit=8,REC =1, IOSTAT=iostat) temp 

ALLOCATE (temp(i:j)) 
print *, temp 

CLOSE(8) 

Ich möchte nur alle Werte aus der Datei einlesen.

+1

Ihr IO wird nicht so funktionieren, aber der Fehler, den Sie erhalten, ist aus der Aussage zuordnen. Sie definieren die Temperatur als zweidimensional, weisen sie jedoch als eindimensional zu. Um ein zweidimensionales Array zuzuordnen, müssten Sie etwas tun wie 'allocate (temp (i, j))'. – haraldkl

+1

Überprüfen Sie, wie Sie Ihr Array zuweisen, Sie müssen zwei Erweiterungen bereitstellen, da Sie ein 2D-Array haben, liefern Sie einen Bereich. Ihr Bereich basiert auf nicht initialisierten Variablen "i" und "j". Sie sollten Ihr Array vor der Verwendung in einer Leseanweisung zuweisen, nicht nach dem Lesen. Für das Lesen sollten Sie wissen, wie Ihre Daten in die Datei geschrieben wurden, bevor Sie versuchen, sie zu lesen. Der erste Haken ist, dass Sie die Datei nicht als Datei mit direktem Zugriff öffnen und versuchen, sie als Datei mit direktem Zugriff zu lesen. Sie müssen das 'recl' beim Öffnen angeben, um es als direkten Zugriff zu lesen. – innoSPG

+0

Haben Sie Zugang zu einem modernen Compiler (2008+)? Wenn dies der Fall ist, verwenden Sie bitte den 'newunit'-Spezifizierer, anstatt Dateieinheiten-IDs fest zu codieren. – jlokimlin

Antwort

0

ALLOCATE (temp(i:j)) weist ein 1D-Array mit Untergrenze i und Obergrenze j zu.

Jedoch wird temp als 2D-Array deklariert DIMENSION(:,:).

Sie müssen es konsequent machen.