2 votes

Lecture de l'entier à partir du fichier se termine par "Format manquant pour le transfert de données formaté effectué"

Je mets à jour un programme Fortran pour mes besoins. Le programme compile en utilisant f95 et gcc version 4.1.2 (je sais que c'est vieux, mais je ne peux pas le mettre à jour). Je veux lire des paramètres à partir d'un fichier et j'essaie cela via

      inquire (file="resLast", exist=resExist)
      if (readStart.eq.1.and.resExist) then
         open (unit=18,file='resLast', status='old', action='read')
         read (18) startConf
         read (18) avlength, stdlength, avenergy
         read (18) i,h2(1)
         read (18) i,h2(2)
         read (18) i,h2(4)
         read (18) i,h2(5)
         read (18) i,h2(8)
         read (18) i,h2(9)
         read (18) i,h2(13)
         read (18) i,h2(16)
         read (18) i,h2(17)
         read (18) i,h2(18)
         read (18) i,h2(20)
         read (18) i,h2(25)
         read (18) i,h2(32)
         close (18)
      else
         startConf = 0
         do i=1,32
            h2(i)=0
            comh2(i)=0
         enddo
         avlength=0d0
         stdlength=0d0
         avenergy=0d0
      endif

Le fichier d'entrée ressemble à ça

           0
   196.090732114834        38451.5752213317        53.4452884569457     
           1  9.188750409521163E-004
           2  4.548226133920252E-004
           4  8.704101492185146E-005
           5  2.175445697503164E-004
           8  4.992044341634028E-005
           9  2.108949411194772E-005
          13  4.304789035813883E-005
          16  4.693072696682066E-005
          17  8.976260141935199E-005
          18  2.737747854553163E-005
          20  5.637826689053327E-005
          25  3.860405195155181E-005
          32  3.193027441739105E-005

Quand j'essaie de lancer cela, j'obtiens une erreur

Fortran runtime error: Missing format for FORMATTED data transfer
done

qui pointe vers la première ligne read. La variable startConf, ainsi que i`` est un entier. Le reste des variables sont en double précision.

J'ai utilisé cette méthode pour lire des données dans des entiers précédemment (même dans le même code) sans problème, où est ma faute actuelle?

7voto

Bálint Aradi Points 3534

Comme vous ne le spécifiez pas explicitement, votre instruction open suppose un fichier formaté (texte). Lorsque vous lisez à partir d'un fichier texte, vous devez fournir un format :

read(18, *) i1

Alternativement, si votre fichier est non formaté (binaire), ouvrez votre fichier en conséquence :

 open (unit=18, file='resLast', status='old', action='read', form='unformatted')

0voto

John Points 105

Read(18,*) est un meilleur choix. vous pouvez essayer ceci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X