salut
je veut lire (abcdefgh)
mais deux deux
par exemple je définie une variable var
et je veux que cette variable prendre a chaque foi deux lettres
elle prend ab , après cd ....etc
???
salut
je veut lire (abcdefgh)
mais deux deux
par exemple je définie une variable var
et je veux que cette variable prendre a chaque foi deux lettres
elle prend ab , après cd ....etc
???
Salut!
Qui se trouve où?je veut lire (abcdefgh)
Jean-Marc Blanc
par example
dans le fichier don.txt se trouve un code comme sa
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CHARACTER var*2 open(5,file='don.txt',status='unknown') do i=1,4 read(5,*) var .......
je veut que var ne prend pas toute la valeur (abcdefgh) mais par une boucle (DO) a chaque fois le "var" prend 2 lettres
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 abcdefgh
pour i=1
var=ab
pour i=2
var=cd
.
.
.
est ce que si possible ?
Bonjour,
Pour lire une même ligne "par morceaux", on peut utiliser l'argument advance='no' de l'instruction read et préciser le format de lecture:
Une remarque en passant: attribuer l'unité 5 au fichier est une très mauvaise idée (c'est usuellement préconnecté à l'entrée standard) ; d'une façon générale, il est préférable d'utiliser des valeurs plus grande que 10 pour les fichiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 program read_file character(len=2) :: var integer :: i open(15,file='don.txt',status='unknown') do i=1,4 read(15,fmt='(a2)',advance='no') var write(*,*)'i:',i,' var:',var enddo end program read_file
Bonne continuation.
Bonjour;
Merci Ehouarn pour votre réponse
j'ai essayé avec sa ...
le fichier don.txt
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 character*2 var integer i,c(20) open(15,file='don.txt',status='unknown') open(unit=20,file='res.txt',status='unknown') do i=1,4 read(15,rec=i,fmt='(a2)') var if(var.eq.'ab')then c(i)=0 endif if(var.eq.'cd')then c(i)=1 endif if(var.eq.'ef')then c(i)=2 endif if(var.eq.'jh')then c(i)=3 endif enddo write(20,*) (c(i),i=1,4) end
mais le résultat n'est pas juste
Code : Sélectionner tout - Visualiser dans une fenêtre à part abcdefjh
j'obtiens 0 0 0 0
je sais pas pas ou est le problème !!!
Bonjour,
c'est normal, l'utilisation de l'argument "rec" n'est pas justifié dans votre cas. Je vous suggère de suivre le conseil d'Ehouarn
De plus, plutot que des "if-endif", un "select-case" est plus approprié dans ce cas. Donc ca donnerai :Envoyé par Ehouarn
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 character*2 var integer i,c(20) open(unit=15,file='don.txt',status='unknown') open(unit=20,file='res.txt',status='unknown') do i=1,4 read(15,fmt='(a2)',advance='no') var select case(var) case('ab') c(i)=0 case('cd') c(i)=1 case('ef') c(i)=2 ... end select enddo write(20,*) (c(i),i=1,4) end
quand j'ai essayé ce programe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 C:\Users\AmineMak\AppData\Local\Temp\ccessai.f: In program `MAIN__': C:\Users\AmineMak\AppData\Local\Temp\ccessai.f:7: read(15,fmt='(a2)',advance='no') var ^ Unsupported READ control item at (^) -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported C:\Users\AmineMak\AppData\Local\Temp\ccessai.f:8: select case(var) ^ SELECT CASE on CHARACTER type (at (^)) not supported -- sorry
je pense que le problème est dans mon compilateur !
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 character*2 var integer i,c(20) open(unit=15,file='don.txt',status='unknown') open(unit=20,file='res.txt',status='unknown') do i=1,4 read(15,fmt='(a2)',advance='no') var select case(var) case('ab') c(i)=0 case('cd') c(i)=1 case('ef') c(i)=2 case('jh') c(i)=3 end select enddo write(20,*) (c(i),i=1,4) end
Bonjour,
Ca ressemble effectivement à un problème de compilateur qui ne reconnait pas l'argument "advance". Plus surprenant, apparement il refuse "select case" sur une chaine de caractère, ce qui est normalement autorisé en fortran.
Pouvez-vous précisez la configuration de votre système ?
compilateur , version, OS ?
compilateur :
Force 3.0 b3 plus GNU Fortran 77 (G77)
téléchargé
http://force.lepsch.com/2009/05/downloads.html
O.S:
windows 7 32bit
Bonjour,
Ce n'est pas un problème de compilateur mais de version de compilateur.Ca ressemble effectivement à un problème de compilateur qui ne reconnait pas l'argument "advance". Plus surprenant, apparement il refuse "select case" sur une chaine de caractère, ce qui est normalement autorisé en fortran.
advance et select case (entr'autres) ne sons pas inclus dans la norme FORTRAN77 mais apparaissent dans la norme Fortran 90.
Comme écrit plus haut, il est normal qu'un compilateur FORTRAN77 rejette les instructions qu'il ne connait pas.
Donc utiliser un compilateur Fortran 90/95 par exemple http://www.silverfrost.com ou http://www.g95.org
Merci beaucoup a vous tous
enfin j'ai terminé ce programme sans erreurs
RÉSOLUS
Partager