Re-bonjour,
Voici un petit problème qui se pose à moi : j'ai un certain nombre de fichiers txt, correspondant à des mesures réalisées un certain jour à une certaine heure (le jour et l'heure forment le nom du fichier). Ces fichiers sont classées dans des dossiers (de 01 à 12) correspondant au mois, eux mêmes dans des dossiers correspondant à l'année (entre 2000 et 2013). Le nombre de fichiers présents par mois varie d'un mois à l'autre, impossible de le prévoir. De même, il y a certains mois (et même certaines années) où je n'ai aucune mesure, et donc je n'ai pas de dossiers.
Si ce n'est pas très clair, voici un exemple sous forme d'arborescence :
Pour lire un fichier, j'utilise la subroutine suivante :/2010/
---01/
------15janvier13h15.txt
------24janvier20h14.txt
---02/
------02fevrier08h05.txt
------02fevrier16h30.txt
------10fevrier14h00.txt
------11fevrier18h45.txt
---04/
------8mars02h50.txt
------29mars09h00.txt
/2012/
---09/
------12septembre19h30.txt
---12/
------24decembre21h00.txt
------25decembre22h30.txt
------30decembre08h45.txt
------31decembre11h15.txt
/2013/
---05/
------01mai10h00.txt
---09/
------10septembre22h55.txt
------12septembre22h55.txt
------24septembre12h30.txt
Or il est nécessaire de connaitre le nom du fichier (et les dossiers le contenant) pour l'ouvrir. Je pourrai, en mode gros bourrin, tester toutes les combinaisons possibles de noms de fichiers, mais ça serait très long et super chronophage...
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 SUBROUTINE Lecture_Fichier(Fichier,Header,Data) IMPLICIT NONE CHARACTER (len=*), INTENT(IN) :: Fichier !Adresse du fichier à ouvrir TYPE(T_FIC_HEADER), INTENT(OUT) :: Header TYPE(T_FIC_DONNEES), INTENT(OUT) :: Data INTEGER (kind=4) :: ios, Size_record INQUIRE(IOLENGTH=Size_record) Header, Data ! Taille de l'enregistrement à lire enregistrée dans Size_record OPEN( UNIT=1, & FILE=Fichier, & FORM="unformatted", & ACCESS="direct", & STATUS="old", & ACTION="read", & RECL=Size_record, & IOSTAT=ios ) IF (ios/=0) THEN PRINT *,"Erreur lecture ",Fichier," - code : ",ios ELSE READ(UNIT=1, IOSTAT=ios, REC=1) Header, Data END IF CLOSE(UNIT=1) END SUBROUTINE Lecture_Fichier
Existe-t-il donc une fonction, ou quelque chose d'autre (une fonction permettant d'ouvrir tour à tour tous les fichiers présents), en Fortran permettant de récupérer les noms des fichiers ou des dossiers présents dans un certain répertoire ?
Merci d'avance pour votre aide !
Partager