[FORTRAN]lecture de fichier

malkave -  
 mbigué -
Bonjour,

voila j'ai un petit problème de lecture de fichier.

Ds mon programme j'ouvre un fichier de la forme :

2 0.00...
5 0.23...
10 0.333
......
voici qq lignes du programme :
open(unit = 12, file = 'xko.dat', status = 'old',iostat = ok)
...
do while(ok == 0) !boucle pour compter le nombre de ligne du fichier
read(12,*,iostat = ok)
if (ok == 0) ligne = ligne + 1
end do
write(*,*) 'nombre de ligne: ', ligne
...
je met ensuite ces valeurs ds des tableaux

read(12,*)
do i = 1, ligne - 1,1
write(*,*) u(i),v(i)
end do

close(12)

et j'obtiens comme message d'erreur :
"Fortran runtime error End of file"
voila je sais pas trop comment y remedier..
si l'un d'entre vous pouvez m'aider..
je vous remercie

Malkave
A voir également:

4 réponses

PPBoyington Messages postés 2318 Statut Membre 402
 
Le FOrtran c'est tres tres loin pour moi mais je me demande si après avoir compté les enregistrements il ne faudrait pas fermer le fichier et le reouvrir, l'ordre read(12,*) de la seconde boucle arrivant apès un eof
0
malkave
 
mc, je viens d'essayer en mettant ca :
open(unit = 12, file = 'xko.dat', status = 'old',iostat = ok)

if(ok /= 0) then
write(*,*) 'erreur 1 fichier xko.dat'
stop
end if

do while(ok == 0) !boucle pour compter le nombre de ligne du fichier
read(12,*,iostat = ok)
if (ok == 0) ligne = ligne + 1

end do
write(*,*) 'nombre de ligne: ', ligne

rewind(unit=12,iostat=ok) !repositionnement au début du fichier en lecture
if(ok /= 0) then
write(*,*) 'erreur 2 fichier xko.dat'
stop
end if


read(12,*)
do i = 1, ligne ,1
write(*,*) u(i),v(i)
end do

close(12)



ca me donne plus le message d'erreur par contre j'obtiens des valeurs byzarre du genre :

134513633 -1.266659408805960E-039
-1302241474 3.646994461465999E-314
0 -5.114562042769608E-039
0 -4.310800876104207E-002
0 -4.823495536104870E-039
0 -5.114304287766659E-039
0 -4.556574190475721E-039
1 0.00000000000000
.....
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > malkave
 
read(12,*)
do i = 1, ligne ,1
write(*,*) u(i),v(i)
end do

Tu lis sur le fichier met ne met le résultat nulle part, puis tu affiche des variables sur la consolen qu'on sait même pas où elles ont été initialisé. Du coup, ça ne me surprend pas que tu écrive n'importe quoi.
0
mbigué
 
merci
0
cchristian Messages postés 928 Statut Membre 131
 
Bonjour,

Essaie en spécifiant au niveau de l'ordre open: FORM=UNFORMATTED. FORMATTED est pris par défaut.
0
malkave
 
je vous remercie de m'avoir répondu...j'ai résolu le pb.. mon programme marche!
et désolé si ma question paraissait naïve.. je débute en fortran...
bonne semaine à tous

voici la correction :
open(unit = 12, file = 'xko.dat', status = 'old',iostat = ok)

if(ok /= 0) then
write(*,*) 'erreur 1 fichier xko.dat'
stop
end if

do while(ok == 0) !boucle pour compter le nombre de ligne du fichier
read(12,*,iostat = ok)
if (ok == 0) ligne = ligne + 1

end do
write(*,*) 'nombre de ligne: ', ligne


rewind(unit=12,iostat=ok) !repositionnement au début du fichier en lecture
if(ok /= 0) then
write(*,*) 'erreur 2 fichier xko.dat'
stop
end if

do i = 1, ligne
read(12,*,iostat = ok) u(i),v(i)
!write(*,*) u(i),v(i)
end do
close(12)
0
cchristian Messages postés 928 Statut Membre 131
 
Bonjour,

Merci pour le retour, bon courage,
0
Billy
 
Purpose
Statement Associates a unit number with an external file or device.
Syntax
OPEN ([UNIT=] unit [ , [ , IOSTAT=iostat] [ , STATUS=status] )

IOSTAT sets the value of iostat to-1 if end-of-file is encountered, to -2 if an end-of-record is encountered, and to the run-time error number (a positive integer) if an error occurs. (See Run-time Error Messages for a list of error numbers and their meaning.) If none of these conditions occurs, iostat is set to 0. IOSTAT can be used with any I/O statement except PRINT.

iostat
(Output) Default integer (INTEGER(4) unless changed by the user). Zero if no error occurs, a negative integer if an end-of-file record is encountered, or the number of the error message. See Errors, End-of-File and End-of-Record Handling (IOSTAT=, ERR=, END=, EOR=) in the Programmer's Guide.
0