[FORTRAN]lecture de fichier
malkave
-
mbigué -
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
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
Configuration: Linux Mandriva Firefox 2.0.0.3
4 réponses
-
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
-
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
..... -
-
-
Bonjour,
Essaie en spécifiant au niveau de l'ordre open: FORM=UNFORMATTED. FORMATTED est pris par défaut.-
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)
-
-
-
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.