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 :

Appel d'une fonction C avec nom de fichier en paramètre


Sujet :

Fortran

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut Appel d'une fonction C avec nom de fichier en paramètre
    Bonjour,

    Voilà j'ai un petit souci.
    J'ai un programme fortran qui prend en paramètre un nom de fichier à ouvrir.
    J'ouvre bien ce fichier (dont le nom fait moins de 80 caractères) et, ensuite, je fais appel à une fonction C avec ce nom de fichier en paramètre.
    Or, dans ma fonction C, je n'ai aucune idée de la taille de ma chaîne et je n'ai pas non plus '\0' à la fin.
    Ma question est de savoir comment initialiser proprement dans mon code Fortran ma variable arg avec 80 '\0' pour pouvoir la traiter normalement dans mon code C...
    Ou alors, il existe une solution moins mauvaise....

    Merci !

  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
    Avant f2003, l'appel à une fonction C dépend totalement du compilateur.

    En général, tu dois insérer manuellement à la fin de la chaîne un caractère nul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call C(trim(MaChaine)//char(0),...)
    De plus, la plupart des compilateurs passent la longueur de la chaine à la fin de la liste (by value). Le code C doit le prévoir. Certains compilateurs offrent des fonctions permettant d'éviter le passage de la longueur. Tu dois vraiment lire le manuel !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut
    Bonjour,
    Merci de ta réponse!

    Par contre, je ne suis pas sûre de bien la comprendre.
    La fonction trim existe t'elle en fortran 77?
    Sinon, existe t'il un équivalent?

    Comment connaitre la taille de ma chaine de caractere?
    Comme c'est un argument et que je n'ai qu'un tableau static, je ne vois pas comment savoir ou s'arrete ma chaine...

    De quel manuel parles tu?

    Merci

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par vince3320
    Par contre, je ne suis pas sûre de bien la comprendre.
    La fonction trim existe t'elle en fortran 77?
    Ca depend du compilateur. A verifier avec le tien.

    Comment connaitre la taille de ma chaine de caractere?
    La methode classique est d'utiliser cette petite fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
          INTEGER FUNCTION strlen(st)
          INTEGER   i
          CHARACTER st*(*)
     
          i = len(st)
          DO WHILE (st(i:i) .eq. ' ')
            i = i - 1
          ENDDO
          strlen = i
     
          RETURN
          END
    De quel manuel parles tu?
    Sylvain Bergeron parlait du manuel de ton compilateur Fortran.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut
    Merci pour ta reponse.

    En fait, j'ai initialise la chaine avec des espaces.
    Je recupere ensuite mon nom de fichier et j'utilise la fonction len_trim qui me permet de savoir la taille exacte de ma chaine. (la fonction trim n'etant pas reconnu par mon compilateur).
    Ensuite, je passe mon nom de fichier et ma taille a ma fonction externe C et tout va bien!

    Merci encore!

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

Discussions similaires

  1. Appel d'une fonction défini dans un autre fichier javascript
    Par jep33 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/02/2009, 08h43
  2. DoFieldExchange : appel d'une fonction oracle avec un paramètre
    Par crabicounet dans le forum Bibliothèques
    Réponses: 0
    Dernier message: 10/12/2008, 10h45
  3. Réponses: 3
    Dernier message: 02/08/2008, 21h36
  4. Réponses: 6
    Dernier message: 07/06/2008, 17h38
  5. Réponses: 4
    Dernier message: 18/01/2007, 05h46

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