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 :

Conversion de chaîne de caractères


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut Conversion de chaîne de caractères
    Salut ,

    j'utilise une bibliotheque Fortran dans un programme C++ , et je veux gérer les erreurs.

    Voila, la fonction Fortran :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
          SUBROUTINE XERBLA(SRNAME,INFO)
    * Generated on Fri Oct  5 13:14:06 RDT 2007 by libs/lapack/build.sh 
    * Calls a C function on run-time error inside Lapack/Blas
          INTEGER INFO
          CHARACTER*6 SRNAME
          Call xerbla_c(SRNAME,INFO)
          RETURN
          END
    Et dans mon code C++ :

    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
    static void
    xerbla_cpp(const char *srname, const int *info)
    {
     //
     // TRAITEMENT : un printf() par exemple. 
     //
    }
     
    extern "C"
    {
     
    void
    xerbla_c__(const char *srname, const int *info)
    {
      xerbla_cpp(srname, info);
    }
     
    }

    Je veux convertir SRNAME pour que mon programme tiens la route

    Merci,

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    Je bloque encore sur le même probléme :

    Si j'ai dans mon code fortran :
    CHARACTER*6 SRNAME

    Comment je peux reccuperer la taille depuis le c ?

  3. #3
    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
    Par défaut
    Tu dois consulter la documentation de ton compilateur.

    Généralement (mais pas toujours), la longueur est passé en valeur à la fin de la liste d'argument.

    Si c'est le cas, ta fonction C devrait avoir la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    extern "C"
    {
     
    void
    xerbla_c__(const char *srname, const int *info, int Lng)
    {
      xerbla_cpp(srname, info);
    }

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    Merci pour votre réponse,

    J'avais deja trouver cela, mais cela ne marchais pas. Je suis sous GCC qui supporte en principe ceci.

    En fait, je viens de trouver la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xerbla_c__(const char *srname, const int *info, long int Lng)
    la taille est un long int, avec un int cela ne marche pas.

    Merci .

    ++

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 72
    Par défaut
    En fortran, la fonction renvoie la longueur de la châine, mais attention, telle que tu l'as déclarée au départ (ici 6 si j'ai bien compris)

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Par défaut
    salut Thyb1,

    Pour le moment c'est le compilateur qui gére la taille de la chaine, je pense que c'est mieux à long terme. Avec une nouvelle version de la bibliothéque fortran que j'utilise, mon code reste inchagé.

    ++

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

Discussions similaires

  1. Conversion de chaînes de caractères
    Par camvac dans le forum Général Python
    Réponses: 7
    Dernier message: 17/07/2012, 12h38
  2. Conversion de chaînes de caractères en numérique
    Par djelloharmel dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/12/2011, 12h03
  3. [LIST] Problème de conversion de chaînes de caractères
    Par yannick29000 dans le forum Autres langages
    Réponses: 0
    Dernier message: 31/07/2009, 13h10
  4. Typage -> conversion en chaîne de caractère
    Par CodeCRC dans le forum Général Python
    Réponses: 1
    Dernier message: 30/06/2009, 18h57
  5. Conversion de chaîne de caractères
    Par fracam2 dans le forum Access
    Réponses: 3
    Dernier message: 19/07/2006, 12h52

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