Bonjour !
J'aprends à programmer avec fortran77.
Comment faire pour ouvrir (lire et écrire) ou accéder au contenu d'un ficher (.txt) dont on ne connaît pas la taille du vecteur enregistré dans ce fichier ?
Bonjour !
J'aprends à programmer avec fortran77.
Comment faire pour ouvrir (lire et écrire) ou accéder au contenu d'un ficher (.txt) dont on ne connaît pas la taille du vecteur enregistré dans ce fichier ?
Il n'y a pas de "growable arrays" en Fortran 77, donc il va falloir prevoir un tableau "assez grand". Des extensions au Fortran 77 (standard en Fortran 90) proposent des allocations dynamiques via ALLOCATE et DEALLOCATE (equivalents de malloc et free en C), mais cela depend des compilateurs.
bonjour
je vais essayer et vous ferai part du resultat
merci
A++
Salut
merci de m avoir ouvrir la route
je suis confronter a un autre pb .j ai un ficher de taille inconue et J aimerais que la fin de la lecture sequentielle du ficher soit marquer par EOF ( c -a-d je lie mon ficher sans tenir compte de sa longueur et j arrete la lecture lorqu il n y a plus rien a lire )
vos propositions me serons utiles .
merci
Il faut utiliser l'argument iostat= de la fonction read.
Un exemple:
pour lire le fichier toto.txt que voici:
sans connaitre a l'avance le nombre de lignes qu'il contient, il faut faire comme suit:8.78
9.87
1.23
L'idee est de controler la valeur de ios, qui est zero tant que le fichier n'est pas termine, positive s'il y a eu une erreur de lecture, negative si EOF est atteint.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 PROGRAM toto IMPLICIT NONE INTEGER ios INTEGER n_value REAL read_value REAL value(10) INTEGER i OPEN(unit=20, file='toto.txt') ios = 0 n_value = 0 do while (.true.) read(unit=20,fmt=*,iostat=ios) read_value if (ios .ne. 0) exit n_value = n_value + 1 value(n_value) = read_value enddo CLOSE(20) do i = 1, n_value print *, value(i) enddo END
On obtient bien la sortie:
8.77999973
9.86999989
1.23000002
je m escuse davoir repondu si tard . votre proposition marche .
c est vraiment ce que je voulais
merci
a++
Partager