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 :

Automatiser lecture de fichier


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Par défaut Automatiser lecture de fichier
    Bonjour,

    J'ai une routine fortran qui lit un fichier et qui me donne en sortie un
    autre fichier .dat. Au début de mon programme j'ai mis un open(12, file=' ').

    Et j'aimerais automatiser cette tâche.
    En effet, j'aimerais que ma routine fortran lise automatiquement tous mes
    fichiers de mon répertoire (./projet).
    Le nom des fichiers en entrée sont de type : jour1_20050102_115001.txt,
    jour1_20050102_115500.txt, etc...
    Et en sortie, j'aimerais que ma routine génère fic_200050102_115001.dat,
    fic_20050102_115500.dat, etc...

    Avez-vous une idée ?
    merci.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Bonjour.
    La solution fonctionne sous WINDOWS. Je l'ai essayée avec gfortran.
    Les fichiers à convertir sont placés dans un dossier 'projet' du répertoire courant.
    Il te reste à intégrer l'appel au sous-programme de conversion.

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    program main
        implicit none
        integer :: ios
    	logical :: ok
    	!--------------------------------------------------------------------------
        ! Repertoire des fichiers a traiter
        character(len=200), parameter :: rep_fichiers = "projet"
     
        ! Liste des fichiers du repertoire a traiter
        character(len=50), parameter :: liste_fichiers = "liste_fichiers_a_traiter"
     
    	! Noms des fichiers a traiter, et retourne par le programme de conversion
        character(len=50) :: fichier_in, fichier_out
     
    	! Caracteristiques du nom du fichier a convertir
    	character(len=5) :: prefixe_in = "jour1"
    	character(len=3) :: suffixe_in = "txt"
     
    	! Caracteristiques du nom du fichier converti
    	character(len=3) :: prefixe_out = "fic"
    	character(len=3) :: suffixe_out = "dat"
    	!--------------------------------------------------------------------------
        ! Lister les fichiers contenus dans le repertoire
        call lister_fichiers
     
        ! Traitement de chaque fichier :
        open( unit=11, file=liste_fichiers, status='old')
        traitement : do
            ! Lire le nom du fichier a traiter
            read(11,"(a)",iostat=ios) fichier_in
            if (ios/=0) exit
     
            ! Determiner le nom du fichier traitee
    		ok = determiner_nom_sortie()
    		if (.not.ok) cycle traitement
     
            ! Appel du sous-programme de conversion (a modifier)
            ! call conversion( fichier_in, fichier_out)
     
    		write(*,'("Conversion : ",a," -> ",a)') trim(fichier_in), trim(fichier_out)
        enddo traitement
        close(11)
     
    contains
     
        subroutine lister_fichiers
            implicit none
            character(len=200) :: commande
     
            ! Valable uniquement sur WINDOWS :
            write(commande,'(4a)') "dir /b ", trim(rep_fichiers), " > ", trim(liste_fichiers)
     
    		! Sur LINUX :
            ! write(commande,'(4a)') "ls -1 ", trim(rep_fichiers), " > ", trim(liste_fichiers)
     
    		call system(commande)
        end subroutine lister_fichiers
     
    	function determiner_nom_sortie()
    		! Determine le nom du fichier de sortie du programme de conversion :
    		! jour1_20050102_115001.txt -> fic_200050102_115001.dat
    		implicit none
    		logical :: determiner_nom_sortie
    		integer :: ind
     
    		! Verification du nom du fichier a convertir
    		if (index(fichier_in,suffixe_in) <= 0) then
    			write(*,'(a)') "Fichier '" // trim(fichier_in) // "' non traite"
    			determiner_nom_sortie = .false.
    			return
    		endif
     
    		! Position du premier "_"
    		ind = index(fichier_in,"_")
    		if (ind <= 0) then
    			write(*,'(a)') "Fichier '" // trim(fichier_in) // "' non traite"
    			determiner_nom_sortie = .false.
    			return
    		endif
    		fichier_out = prefixe_out // fichier_in(ind:)
     
    		! Position du "."
    		ind = index(fichier_out,".",.false.)
    		if (ind <= 0) then
    			write(*,'(a)') "Fichier '" // trim(fichier_in) // "' non traite"
    			determiner_nom_sortie = .false.
    			return
    		endif
    		fichier_out = fichier_out(:ind) // suffixe_out
     
    		determiner_nom_sortie = .true.
     
    	end function determiner_nom_sortie
     
    end program main
    Bon courage.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 50
    Par défaut
    Bonsoir,

    Merci bien.
    J'ai deux questions :
    1) mon programme qui traite mes données pour un fichier, dois-je le transformer en module ? et ensuite appeler ce module depuis le programme que vous venez de me proposer ?
    2) pour lister les fichiers le à la place du "liste_fichiers_a_traiter je dois faire figurer le nom de tous mes fichiers à traiter ? (il y'en a environ 50).

    Merci pour votre aide.

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Par défaut
    Citation Envoyé par karine12 Voir le message
    1) mon programme qui traite mes données pour un fichier, dois-je le transformer en module ? et ensuite appeler ce module depuis le programme que vous venez de me proposer ?
    Sans connaître l'API, je ne sais pas.
    Si c'est une simple fonction ou subroutine, ça n'est pas la peine. Mettre un appel depuis mon programme suffit.
    S'il faut faire des transformations pour l’appeler, un module ou une subroutine intermédiaire serait mieux.


    Citation Envoyé par karine12 Voir le message
    2) pour lister les fichiers le à la place du "liste_fichiers_a_traiter je dois faire figurer le nom de tous mes fichiers à traiter ? (il y'en a environ 50).
    Le programme liste automatiquement les fichiers se trouvant dans le répertoire 'rep_fichiers'. Il suffit d'y mettre les fichiers à traiter et c'est tout.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2011, 09h33
  2. Réponses: 2
    Dernier message: 11/03/2011, 18h06
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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