Bonjour,
J'ai un fichier qui contient 2 colonnes (des données initiales de mon programme) et je veux lire que la deuxième colonne.
comment pourrais je faire ça?
Merci d'avance
Bonjour,
J'ai un fichier qui contient 2 colonnes (des données initiales de mon programme) et je veux lire que la deuxième colonne.
comment pourrais je faire ça?
Merci d'avance
Tu dois normalement traiter ligne par ligne avec une boucle et à chaque ligne, tu lis :
- Si en format libre : 2 variables, une bidon, puis celle que tu veux.
- Si format fixe : Tu saute la plage de la première variable (nX), puis tu lis la variable que tu veux.
Voici une partie du fichier que j'utilise:
quand je fais un print je trouve:
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
24
25
26
27
28
29
30
31
32
33
34 -100.0000000000 0.0000000000 -99.9966661110 0.0000000000 -99.9933322220 0.0000000000 -99.9899983331 0.0000000000 -99.9866644441 0.0000000000 -99.9833305551 0.0000000000 -99.9799966661 0.0000000000 -99.9766627771 0.0000000000 -99.9733288881 0.0000000000 -99.9699949992 0.0000000000 -99.9666611102 0.0000000000 -99.9633272212 0.0000000000 -99.9599933322 0.0000000000 -99.9566594432 0.0000000000 -99.9533255543 0.0000000000 -99.9499916653 0.0000000000 -99.9466577763 0.0000000000 -99.9433238873 0.0000000000 -99.9399899983 0.0000000000 -99.9366561094 0.0000000000 -99.9333222204 0.0000000000 -99.9299883314 0.0000000000 -99.9266544424 0.0000000000 -99.9233205534 0.0000000000 -99.9199866644 0.0000000000 -99.9166527755 0.0000000000 -99.9133188865 0.0000000000 -99.9099849975 0.0000000000 -99.9066511085 0.0000000000 -99.9033172195 0.0000000000 -99.8999833306 0.0000000000 -99.8966494416 0.0000000000 -99.8933155526 0.0000000000
pour lire la 2ème colonne, j'ai fait
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 -100.00000000000000 0.0000000000000000 -99.996666110999996 0.0000000000000000 -99.993332222000006 0.0000000000000000 -99.989998333100004 0.0000000000000000 -99.986664444100001 0.0000000000000000 -99.983330555099997 0.0000000000000000 -99.979996666100007 0.0000000000000000 -99.976662777100003 0.0000000000000000 -99.973328888099999 0.0000000000000000 -99.969994999199997 0.0000000000000000 -99.966661110199993 0.0000000000000000 -99.963327221200004 0.0000000000000000 -99.959993332200000 0.0000000000000000 -99.956659443199996 0.0000000000000000 -99.953325554299994 0.0000000000000000 -99.949991665300004 0.0000000000000000 -99.946657776300000 0.0000000000000000 -99.943323887299996 0.0000000000000000 -99.939989998300007 0.0000000000000000 -99.936656109400005 0.0000000000000000 -99.933322220400001 0.0000000000000000
mais ça marche pas!!! je trouve toujours le même résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 open(UNIT = 1, FILE = 'SSPRK.dat') do i = 1,n if (mod(i,2).ne.0) then read(1,*) U(i) end if end do close(1)
Bonjour,
Le programme ne fonctionne pas car le test n'est pas bon pour au moins 2 raisons :
- 1) U(i) se voit affecter une valeur uniquement pour ses indices impairs. Les valeurs des indices pairs (en l'occurence 0.) sont celles de l'initialisation
- 2)lorsque l'indice est impair, c'est la valeur de la première colonne qui est affectée à U(i)
Comme l'a indiqué Sylvain Bergeron :
Le programme ci-dessous implante cette solution :Tu dois normalement traiter ligne par ligne avec une boucle et à chaque ligne, tu lis :
Si en format libre : 2 variables, une bidon, puis celle que tu veux.
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 program test implicit none integer, parameter :: n = 33 integer :: i real :: trash real, dimension(n) :: u open(unit = 10, file = "SSPRK.dat") do i = 1, n read(10,*) trash, u(i) end do close(10) do i = 1, n print *, u(i) end do end program test
Salut !
Juste pour dire qu'il est souvent avantageux d'utiliser les commandes SHELL (ou équivalentes pour les OS qui ne sont pas des LINUX) pour extraire des données. Par exemple, pour l'extraction de la seconde colonne avec des sed (supprime les espaces) et un cut :
Les données extraites sont écrites dans le fichier colonne 'tmp.dat', qui sera lu par le programme FORTRAN.
Code : Sélectionner tout - Visualiser dans une fenêtre à part cat file_to_extract.dat | sed "s/^\s*//g" | sed "s/\s\s*/ /g" | cut -d " " -f 2 > tmp.dat
Bonjour,
Je vous remercie pour vos réponses mais j'ai encore un petit problème, quand je lance mon programme il m'affiche un message d'erreur:
At line 60 of file main.f90 (unit = 10, file = 'SSPRK.dat')
Fortran runtime error: End of file
Je comprends pas ce message pourtant le fichier SSPRK.dat et le code se trouvent dans le même répertoire!!
Pourriez vous m'expliquez ce message d'erreur?
Merci d'avance
Partager