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 :

problême avec inquire pour tester la présence d'un dossier


Sujet :

Fortran

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 49
    Points : 50
    Points
    50
    Par défaut problême avec inquire pour tester la présence d'un dossier
    Bonjour,

    Je 'excuse si ma questions semble un peu triviale car je ne suis pas habitué au fortran, mais pour une raison étrange, il semblerait que la fonction "INQUIRE" ne veuille pas fonctionner correctement :

    Le dossier dont je veux tester l'existence est le suivant:

    flnm = '/home/shadok/Documents/MCFOST/utils/Mueller_Mat/9_1_17_17'

    et un

    inquire(file=trim(flnm)//'/.', exist=is_existing)

    me renvoie 'F' pour is_existing

    bien que le dossier existe bel et bien puisque un appel comme:

    call system('ls '//trim(flnm))

    m'affiche correctement les sous dossiers présents.

    Donc, comment et pourquoi "inquire" fait-il des siennes ?

    Je suis sous linux, je n'ai donc pas essayé le délimiteur windows '\'

    Merci beaucoup à tous

  2. #2
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    Salut
    cet inquire marche mieux pour tester l'existence d'un dossier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    flnm = '/home/shadok/Documents/MCFOST/utils/Mueller_Mat/9_1_17_17'
    inquire(file=trim(flnm), exist=is_existing)
    Bonne journée
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    Hello,

    Oui j'ai déjà essayé ça mais sans effets...

    avec les "/." ou sans j'ai toujours la réponse "F".

    De plus j'ai regarder, mettre des "/." est ce qui est recommandé dans les autres discutions et ici aussi:

    http://rosettacode.org/wiki/Ensure_t...exists#Fortran

    Donc je suis un peu à cours d'idée en ce qui concerne les méthodes simples et directes...

    Une autre idée de pourquoi ça ne fonctionne pas ?

    Merci en tout cas

  4. #4
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    peut être qu'effectivement le dossier n'existe pas… c'est stupide de demander, mais comme très souvent les bugs sont stupides, pourquoi 1=2, je continues toujours à me le demander ! Essayes d'aller manuellement dans ton dossier en console puis tu fais un bête et méchant pwd que tu copies-colles dans ton code.

    Peut être que les "underscores" ne passent pas bien, essayes de tester un fichiers sans caractères pouvant poser problème. Chez moi, pas de problème avec eux, mais bon qui sait les encodages font parfois ch***. Sinon je sèche. Ce post donne une solution :

    http://www.developpez.net/forums/d78...toire-calculs/

    complétée par

    http://www.developpez.net/forums/d10...ortran-system/

    J'ai compilé avec ifort et il me retourne également .false. pour un répertoire alors qu'avec gfortran j'ai .true. , tu compiles avec quoi ?
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    Ben techniquement je fais un

    call System('ls '//trim(flnm))

    et il me renvoie parfaitement les sous fichiers. AU début, en effet, je formait mal ma chaine de caractère et le "ls" ne fonctionnait pas. Mais là oui. Donc le fichier doit exister.

    J'ai compilé avec ifort en effet, ça vient peut-être de là...

    Je confirme: la compilation avec g95 me renvoie True comme résultat...



    ok... alors là je suis complètement perdu...

  6. #6
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    après quelques bricolages et une recherche google je suis tombé sur :

    http://publib.boulder.ibm.com/infoce...lr/inquire.htm

    ce qui après lecture m'a permis d'intégrer une nouvelle variable logical.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    flnm = '/home/shadok/Documents/MCFOST/utils/Mueller_Mat/9_1_17_17'
    inquire(file=trim(flnm), exist=is_existing, named=second_test)
    donc avec ifort j'ai is_existing false et second_test true et gfortran donne les deux à true. C'était une chouette question, je vais me coucher moi bête ce ss, non ce matin.

    En espérant que ça résolve le problème

    Edit : le doute est venu… en fait ça donne true même quand il n'y a pas existence, Grr ce n'est donc pas une solution
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  7. #7
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    re-bricolage avec l'aide de :

    http://software.intel.com/sites/prod...tain_finfo.htm

    donc comme on l'a déjà vu la syntaxe de test pour un dossier est la même que pour un fichier avec gfortran mais avec ifort il faut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INQUIRE (DIRECTORY="path/du/dossier", EXIST=L_EXISTS)
    et pour g95 est ce que c'est la même syntaxe ? Pas si triviale la question

    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 49
    Points : 50
    Points
    50
    Par défaut
    WOW ! Super !

    ça marche impecable! Suffisait donc juste de remplacer le "file=" par "directory="

    Je le garde sous le coude


  9. #9
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    …l'aventure continue avec les flags préprocesseurs :
    http://fortranwiki.org/fortran/show/...ocessor+macros

    Lors de la compilation certains flags sont définis par le compilateur notamment pour:
    - gfortran : __GFORTRAN__
    - ifort : __INTEL_COMPILER
    donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifdef __GFORTRAN__
          INQUIRE (FILE="path/du/dossier", EXIST=L_EXISTS
    #endif
     
    #ifdef __INTEL_COMPILER
         INQUIRE (DIRECTORY="path/du/dossier", EXIST=L_EXISTS)
    #endif
    et on n'oubli pas de rajouter l'option -cpp et -fpp respectivement pour compiler avec gfortran et ifort. En espérant que ça puisse servir à quelqu'un.
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  10. #10
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    petite variante mais qui a son utilité si on fait plusieurs inquire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ! on défini _FILE_DIR_ en fonction du compilateur
    #ifdef __INTEL_COMPILER
    #define _FILE_DIR_ DIRECTORY
    #elif __GFORTRAN__
    #define _FILE_DIR_ FILE    
    #endif
     
    ! au lieu de mettre DIRECTORY ou FILE on met _FILE_DIR_ qui a été précédemment
    ! mis à la bonne valeur en fonction du compilateur
      INQUIRE (_FILE_DIR_="path/du/dossier", EXIST=L_EXISTS)
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/02/2006, 18h31
  2. Petit problème avec GCC pour l'Unicode...
    Par Nico*3-3 dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 29/01/2006, 17h12
  3. problème avec strtok pour récupérer les vides
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 02/06/2005, 20h08
  4. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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