IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Ouvrir successivement tous les fichiers présents dans un dossier, sans connaitre leur nom à l'avance


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Homme Profil pro
    Elève ingénieur ENSG
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Elève ingénieur ENSG
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 20
    Points
    20
    Par défaut Ouvrir successivement tous les fichiers présents dans un dossier, sans connaitre leur nom à l'avance
    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 :

    /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
    Pour lire un fichier, j'utilise la subroutine suivante :

    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
    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...

    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 !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    La technique classique consiste à :
    • produire l’arborescence dans un fichier (ls > ListeDeFichiers.lst)
    • lire le fichier pour extraire les noms de fichier à traiter
    • traiter chacun des fichiers

    La première étape peut être faite par script avant de lancer le programme, ou directement dans le programme (voir les fonctions system et EXECUTE_COMMAND_LINE).

    La deuxième étape doit se faire par une boucle dans le programme.

    La troisième étape consiste à appeler ta routine Lecture_Fichier.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Elève ingénieur ENSG
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Elève ingénieur ENSG
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 20
    Points
    20
    Par défaut
    Super, je ne savais pas qu'il était possible de faire ça. Je m'y mets de suite, encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. accéder à des fichiers dans un dossier sans connaitre leurs noms
    Par mkachekh dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/03/2010, 13h27
  2. Réponses: 2
    Dernier message: 23/12/2009, 12h05
  3. Réponses: 2
    Dernier message: 16/06/2009, 16h04
  4. Lister les noms de fichiers présents dans un dossier FTP
    Par nico1214 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/05/2009, 10h36
  5. Afficher dans Excel tous les fichiers contenu dans un dossier
    Par popsmelove dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/01/2008, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo