Gestion de fichiers en fortran 90/77
Résolu
Irene_Adler
Messages postés
136
Statut
Membre
-
cchristian Messages postés 928 Statut Membre -
cchristian Messages postés 928 Statut Membre -
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!!!!!!
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!!!!!!
A voir également:
- Gestion de fichiers en fortran 90/77
- Gestion de fichiers - Télécharger - Gestion de fichiers
- Renommer des fichiers en masse - Guide
- Explorateur de fichiers - Guide
- Logiciel gestion photo gratuit - Guide
- Logiciel gestion locative gratuit excel - Télécharger - Comptabilité & Facturation
5 réponses
Bonsoir,
Essaie en ajoutant : OPEN (UNIT = 70, .............., STATUS = ....
A titre de comparaison je joins une instruction OPEN qui fonctionne (en Fortran 77):
--
Cordialement.
Cchristian.
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.
regarde là
ftp://ftp-developpez.com/fortran/cours/notions-base.pdf
tu devrais trouve facilement.
ftp://ftp-developpez.com/fortran/cours/notions-base.pdf
tu devrais trouve facilement.
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='direct',recl=ngage*20)
-----------------------------------------------------------------------------------------------------------------^
voici le bout de code:
open(70,file='eta_fct_of_time',form='formatted',access='direct',recl=ngage*20)
write(70,rec=it,fmt='(100F8.4)')(etn(ixg(k),iyg(k)),k=1,ngage)
close(70)
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='direct',recl=ngage*20)
-----------------------------------------------------------------------------------------------------------------^
voici le bout de code:
open(70,file='eta_fct_of_time',form='formatted',access='direct',recl=ngage*20)
write(70,rec=it,fmt='(100F8.4)')(etn(ixg(k),iyg(k)),k=1,ngage)
close(70)
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...
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...
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='direct',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!!!!!!!!!
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='direct',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!!!!!!!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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.
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 ...............................................