Rechercher : dans
Par :

Gestion de fichiers en fortran 90/77

Dernière réponse le 22 nov 2009 à 22:07:53 Irene_Adler, le 26 jun 2008 à 23:54:14 
 Signaler ce message aux modérateurs

Bonjour à tous!
Voila, Je travaille sur un programme en fortran 77 (c'est vieux comme le monde!) et
je voudrais creer un fichier FORMATÉ qui va m'afficher les resultats de mes calculs.
Seulement, il faut que je l'ouvre et le ferme plusieurs fois et je ne sais pas comment faire pour qu'il continue à écrire là où il s'était arreté précédemment...

Merci aux âmes charitables!!!!!!

Meilleures réponses pour « gestion de fichiers en fortran 90/77 » dans :
[Multimédia] Gestion multimédia VoirLogiciels de gestion multimédia Par gestion multimédia, comprenons : l'affichage des images sous formes de vignettes, la gestion d'albums de photos, la lecture de fichiers audio, la visualisation de vidéos, éventuellement des possibilités...
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
Gestion du profil sous Mozilla Thunderbird VoirGestion du profil sous ThunderBird Localiser le profil Le profil utilisateur de Mozilla Thunderbird est stocké dans un répertoire utilisateur par défaut dont l'emplacement dépend du système d'exploitation : Sous Windows XP/2000, le chemin est...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...
Partage de fichiers sous Windows XP VoirIntérêt Le partage de fichiers consiste à rendre disponible à travers le réseau le contenu d'un ou plusieurs répertoires. Tous les systèmes Windows possèdent en standard des mécanismes permettant de mettre facilement en partage le...
Linux - Gestion des utilisateurs VoirPremier pas de l'administrateur Lorsque diverses personnes ont accès à un système, il est nécessaire que l'administrateur système gère les utilisateurs. Pour ceci, les commandes usuelles et les fichiers à configurer doivent être connus. Les...

1

Char Snipeur, le 27 jun 2008 à 08:44:23

Regarde là
ftp://ftp-developpez.com/fortran/cours/notions-base.pdf
tu devrais trouve facilement. Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur

Répondre à Char Snipeur

2

Irene_Adler, le 27 jun 2008 à 16:57:27

Merci pour les cours!
J'ai essayé d'ouvrir un fichier en accès direct mais j'ai toujours le même message d´erreur:

fortcom: Error: funwave2d.f, line 93: Syntax error, found END-OF-STATEMENT when expecting one of: , )
open(70,file='eta_fct_of_time',form='formatted',access='dire­ct',recl=ngage*20)
------------------------------------------------------------­-----------------------------------------------------^

voici le bout de code:
open(70,file='eta_fct_of_time',form='formatted',access='dire­ct',recl=ngage*20)
write(70,rec=it,fmt='(100F8.4)')(etn(ixg(k),iyg(k)),k=1,nga­ge)
close(70)

Répondre à Irene_Adler

3

cchristian, le 27 jun 2008 à 22:56:31
  • +1

Bonsoir,

Essaie en ajoutant : OPEN (UNIT = 70, .............., STATUS = ....

A titre de comparaison je joins une instruction OPEN qui fonctionne (en Fortran 77):

       OPEN      (UNIT   = DATA_UT_IN,     IOSTAT = IO_RC, 
     S            FILE   = F_NAME_IN,      STATUS = 'OLD',
     S            ACCESS = 'SEQUENTIAL',   FORM   = 'FORMATTED', 
     S            ERR    = 15)



--
Cordialement.

Cchristian.

Répondre à cchristian

6

Irene_Adler, le 30 jun 2008 à 17:00:51

Bonjour,
Merci de ta réponse,
J'ai essayé avec ton code mais j'ai besoin d'un accès direct et c'est là qu'il trouve un problème .
A titre d'info, J'ai un compilateur ifort que j'ai téléchargé dans le site de Intel...

Répondre à Irene_Adler

7

cchristian, le 30 jun 2008 à 19:20:50

Voici une séquence qui fonctionne chez moi et qui met en oeuvre un fichier à organisation et accès directs.

       IO_ORDRE          = 'INQUIRE_DIR'        
       INQUIRE   (FILE   = F_NAME_DIR,     
     S            OPENED = F_OP,           EXIST  = F_EX,
     S            DIRECT = F_DIR,          ERR    = 15 ) 


       IF        ( F_DIR .eq. 'YES' )      THEN
          PRINT 700,   F_NAME_DIR, F_DIR, 'peut donc ' 
       ELSE
          PRINT 700,   F_NAME_DIR, F_DIR, 'NE PEUT PAS' 
          GO TO 150            
       END IF                               

C      Ouverture en accès direct du fichier F_NAME_DIR.
       IO_ORDRE          = 'OPEN_DIR'        
       OPEN      (UNIT   = DATA_UT_DIR,    IOSTAT = IO_RC, 
     S            FILE   = F_NAME_DIR,     STATUS = 'OLD',
     S            ACCESS = 'DIRECT',       FORM   = 'FORMATTED',
     S            ERR    = 15,             RECL   = F_SIZE_DIR)

C      ------------------------------------------------------------­----
C      Lectures pour affichage console des enreg;F_NAME_DIR AVANT MODIF
C      ------------------------------------------------------------­----

       PRINT 1000
       PRINT 1010

       IO_ORDRE          = 'READ_DIR' 
       CPT_ENREG         = 1
       IO_RC             = 0        

       DO WHILE  (IO_RC  ==  0)
           IO_ORDRE      = 'READ_DIR'        
           READ  (UNIT   = DATA_UT_DIR,    IOSTAT = IO_RC,
     S	          FMT    = 500,            REC    = CPT_ENREG, 
     S            ERR    = 15)
     S            LINE  

          IF     (IO_RC    .eq.    -1)     THEN
             PRINT   1010
             PRINT *,F_NAME_DIR, ': Fin normale de fichier RC : ', 
     S               IO_RC,' SUR ORDRE : ', IO_ORDRE
             PRINT *,F_NAME_DIR, ': Nb. d''enregistrements lus    : ',
     S               CPT_ENREG  - 1      
          ELSE
             PRINT 500,    LINE
             CPT_ENREG   = CPT_ENREG  + 1
          ENDIF                   
       END DO

...........................................
...........................................
      GO TO ..........
       
15     PRINT *,' '
       PRINT *, 'ANOMALIE ENTREE/SORTIE FS : ',    IO_RC, ' SUR ORDRE :'            
     S         ,IO_ORDRE 
      GO TO .....................

150    IO_ORDRE            = 'CLOSE_OUT_DIR'        
       CLOSE     (UNIT     = DATA_UT_OUT,    IOSTAT = IO_RC,
     S              ERR    = 15,             STATUS = 'KEEP')
...............................................
.............................................
100       FORMAT (I3, F10.2, F10.2                                  )
200       FORMAT (1X, (BZ,I3), 2X, (BZ,F10.2), 2X, F10.2, 2X, F10.2 )
300       FORMAT (1X, 'Le resultat de  A (', F6.2, ') + B (', F6.2,   
     S            ') est C = ', F6.2                                )
400       FORMAT (20X, 'TAB2 (', I3, ')', ' = ', I3                 )  
500       FORMAT (A80                                               )
510       FORMAT (I4, A76)
600       FORMAT (//,1X,   'INQUIRE passé sur ',             A13,
     S            ' apres creation des ',                    I4, 
     S            ' enregistrements d''une',              /, 1X, 
     S            ' longueur de:',                           I4,
     S            ' caracteres chacun. Status : OPEN : ',    L1,
     S            ' -- EXISTE : ',                           L1     )
700       FORMAT (//,1X, A10,' status DIRECT : ',            A3,
     S            '. Ce fichier ',                           A13,
     S            ' etre accede en direct')
800       FORMAT (/,1X, A10, ' ne contient pas plus de ',    I4,
     S            ' enregistrements. Entrez une valeur : ',  $      ) 

900       FORMAT (1X, 1I3, 1X, A9, 1I2, 1I2, ' ', 1I5, '-', A8,      
     S             ' dans ',  A13, ' step: ', A15                   )  
910       FORMAT (1X,I3, A9, 1I2, 1I2, ' ', 1I5, '-', A8,      
     S             ' dans ',  A13, ' step: ', A15                   )  
1000      FORMAT (
     S        '0        1         2         3         4         5     ',
     S        '    6         7         8'                           )
1010      FORMAT (
     S        '1---5----0----5----0----5----0----5----0----5----0----5',
     S        '----0----5----0----5----0', /                        )


P.S. Question : Le fichier file='eta_fct_of_time' a bien été créé en tant que fichier à organisation et accés directs ? Ce n'est pas un fichier créé en "séquentiel" que tu tentes d'ouvrir en accés direct.
Cordialement.

Cchristian.

Répondre à cchristian

9

Irene_Adler, le 30 jun 2008 à 19:48:06

Merci, je vais essayer...

Répondre à Irene_Adler

10

Irene_Adler, le 1 jui 2008 à 16:34:55

Je n'ai pas créé le fichier, ne se crée-t-il pas directement avec l'instruction open? faut -il que je rajoute status='new'?

Répondre à Irene_Adler

12

cchristian, le 1 jui 2008 à 17:30:39

Bonjour,

Si le fichier n'existe pas il faudra la première fois le créer avec NEW :
Ma remarque était en effet mal formulée, elle sous-entend que le fichier est déjà existant créé dans une précédente étape, alors qu'il va être constitué dans le même programme par les instructions :

C      Ouverture en accès direct du fichier F_NAME_DIR.
       IO_ORDRE          = 'OPEN_DIR'        
       OPEN      (UNIT   = DATA_UT_DIR,    IOSTAT = IO_RC, 
     S            FILE   = F_NAME_DIR,     STATUS = 'NEW',
     S            ACCESS = 'DIRECT',       FORM   = 'FORMATTED',
     S            ERR    = 15,             RECL   = F_SIZE_DIR)
       ...................................

 
        ................................
           INTERM             = 1     ! N° relatif d'enregistrement (1 à n)
C      Boucle écritures en accès direct  dans le fichier F_NAME_DIR.
       ....................................
            IO_ORDRE    = 'WRITE_DIR'
             WRITE (UNIT = DATA_UT_DIR,    IOSTAT = IO_RC,
     S              FMT  = 505,            REC    = INTERM,    
     S              ERR  = 15)
     S              .....................,    ..................,

          INTERM             = INTERM             +  1  
          ...........................
         ............................
C     Fin de la boucle 
         ...............................................
Cordialement.

Cchristian.

Répondre à cchristian

4

Char Snipeur, le 30 jun 2008 à 08:41:39

Peut être n'aime til pas le *20... Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur

Répondre à Char Snipeur

5

Irene_Adler, le 30 jun 2008 à 16:55:50

J'ai essayé avec un nombre et j'ai le même message d'erreur.
Les fichiers formattés en accès direct fortran 90 marchent-ils mieux?

Répondre à Irene_Adler

8

Irene_Adler, le 30 jun 2008 à 19:41:43

Pour les futurs lecteurs de cette discussion:

Un des problèmes rencontré est que le compilateur ne comprend pas les instructions open,write,read,....
quand elles sont en début de ligne,
il faut absolument faire une indentation pour qu'il comprenne.(ne pas écrire dans les colonnes 1 à 5 car c'est la zone pour les étiquettes.)

certains compilateurs marchent comme ca...

Répondre à Irene_Adler

11

Irene_Adler, le 1 jui 2008 à 17:17:54

Merci de votre aide, Je crois que j'ai trouvé l'erreur:

fortcom: Error: funwave2d.f, line 93: Syntax error, found END-OF-STATEMENT when expecting one of: , )
open(70,file='eta_fct_of_time',form='formatted',access='dire­ct',recl=ngage*20)
------------------------------------------------------------­---------------------------^


ici, outre le fait que je n'avais pas fait d'identation et qu'une fois sur deux il ne reconnaissait pas l'instruction OPEN,
il fallait:

- faire plusieurs lignes car la ligne d'instruction OPEN était trop longue et il ne la lisait pas en entier


en faisant cela, le programme compile.

REMARQUE: avant de lire un fichier binaire, utiliser la fonction
rewind(UNIT_FILE)

MERCI ENCORE!!!!!!!!!

Répondre à Irene_Adler

13

 cchristian, le 1 jui 2008 à 17:33:02

Bon courage, merci pour ces infos, Cordialement.

Cchristian.

Répondre à cchristian