[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
Configuration: Linux Mandriva
Firefox 2.0.0.3

4 réponses

  1. 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
    1. 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
      1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331 > 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
    2. mbigué
       
      merci
      0
  2. 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
    1. 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
  3. cchristian Messages postés 928 Statut Membre 131
     
    Bonjour,

    Merci pour le retour, bon courage,
    0
  4. 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