PDA

Visualizza la versione completa : fortran 90: errore in lettura file di dati


mic_1
18-05-2010, 18:48
ciao a tutti!
sto provando a programmare in fortran 90, ed ho un problemino:
devo leggere da file dei dati, rielaborarli e scrivere su nuovo file i dati ottenuti.
Il mio problema sta nel file da cui prelevare i dati: in fase di lettura file, IOSTAT ritorna sempre un errore (-1 o 22).
Ho pensato che di aver strutturato male il file, ma qualunque struttura dia ai dati, ho sempre errore. Ho provato a fare un semplice ciclo di 10, ma continuo ad avere errore.
Non riesco a capire cosa stia sbagliando.
Qualcuno pu aiutarmi?

Il testo dice questo:

Su due files diversi sono state registrate tutte le misure relative a B.
Ciascuna misura contenuta in un 'record' singolo e consiste nei seguenti dati:
- valore di B (crescente da 0 a 8 con passo 0.5)
- valori C,D,E,F
NB:Per ogni valore di B sono state effettuate 100 misure
NB:Tutte le misure a B=0 precedono su files tutte le misure a B=0.5, etc per gli altri valori crescenti.

Grazie

mic_1
18-05-2010, 19:56
Questo una parte di codice che ho scritto, ma il file sembra continuarmi a dare problemi: READ(U(K)...,IOSTAT=IOS) mi segnala ios=-1 prima, ios=22 poi, ma non capisco. Cosa sbaglio? GRAZIEMILLE!!



PROGRAM CONVERT
IMPLICIT NONE

LOGICAL F(2)
INTEGER U(2),K,I,J,IOS
REAL SOM,CALC,EFFMED(17),DEVST(17),DIFPERC(17),B(17),
+Vin(100),Iin(100),Vload(100),Iload(100),EFFIC(100 )
CHARACTER*13 CONFIG(2),FILENEW*12
DATA CONFIG/'ortogonal.dat','parallela.dat'/,
+FILENEW/'tabella.dat'/

OPEN (13,FILE=FILENEW,STATUS='NEW',ERR=1002)
WRITE (13,201,ERR=1004)

K=0
DO 50,K=1,2
INQUIRE (FILE=CONFIG(K),EXIST=F(K))
IF (F(1).OR.F(2)) THEN
U(1)=11
U(2)=12
END IF
OPEN (U(K),FILE=CONFIG(K),ACCESS='SEQUENTIAL',
+ FORM='UNFORMATTED',STATUS='OLD',ERR=1001)

SOM=0.0
CALC=0.0
DO 51,I=1,17
DO 52,J=1,100
READ (U(K),ERR=1003,IOSTAT=IOS) B(I),Vin(J),
+ Iin(J),Vload(J),Iload(J)

calcoli vari

52 CONTINUE

WRITE (13,202,ERR=1004) CONFIG(K),B(I)

51 CONTINUE

CLOSE (U(K))
F(K)=.FALSE.

50 CONTINUE

STOP
altro
END

mic_1
02-06-2010, 17:43
ciao a tutti,
scusate se ho inserito parte del codice, ma non usando molto il forum non sono molto afferrata su come va gestito!
Spero che quanto scritto possa essere, almeno, di aiuto a qualcuno!

Dopo vari tentativi ho capito l'errore che stavo facendo! Non corrispondeva il codice scritto con il file che avevo creato.

L'errore stava proprio nel fatto che, con un file strutturato come nell'esempio sottostante, in cui ciascuna misura contenuta in un record singolo, non era necessario dichiare le variabili B,Vin,Iin,Vload,Iload come vettori, con array (B(17) e le altre di 100 elementi).

NB:Tutte le variabili vanno dichiarate senza array per un file strutturato in questo modo!

Esempio:
B=0.0 Vin Iin Vload Iload
B=0.0 Vin Iin Vload Iload
B=0.0 Vin Iin Vload Iload
B=0.0 Vin Iin Vload Iload
.
.
per 100 record
B=0.5 Vin Iin Vload Iload
B=0.5 Vin Iin Vload Iload
B=0.5 Vin Iin Vload Iload
B=0.5 Vin Iin Vload Iload
.
.
per 100 record
.
.
fino ad un totale di 1700 record!

Ciao a tutti :)

Loading