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 :

[Fortran g77] Comment convertir une chaîne de caractères en entier ?


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut [Fortran g77] Comment convertir une chaîne de caractères en entier ?
    Bonsoir à tous,

    J'ai un petit souci dans une de mes sous-routines en Fortran. Dans celle-ci, je fais la déclaration suivante :
    puis ensuite, j'entre la ligne de commande suivante :
    => Cette commande génère une erreur lors de la compilation avec g77.

    (Cette sous routine se compile sans problème (juste un warning) avec f77 sous UNIX)

    Existe-t-il une fonction fortran qui permet de convertir un caractère en entier ?

    Merci pour votre aide.

    PS: j'utilise OS: Linux (Debian Sarge, avec compilateur g77)

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 79
    Points : 89
    Points
    89
    Par défaut
    Bonjour,


    Existe-t-il une fonction fortran qui permet de convertir un caractère en entier ?
    Une piste à explorer
    Annexe C conversion de type la fonction ichar(cr) devrait te permettre une conversion d'un caractère en son code ascii.
    Sinon, pourrais-tu stp mieux détailler ton programme, car avec ce que tu donnes là j'ai vraiment du mal à voir ce que tu fais/et ce que tu pourrais avoir oublié.

  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
    Points : 1 346
    Points
    1 346
    Par défaut Convertir un caractère en entier
    En Fortran 95:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    character (10) s
    integer k
    s = '123'
    read(s,*) i
    write(*,*) i ! Écrira 123
    end
    En Fortran 77, la combinaison internal (lecture/écriture sur un caractère) et list-directed (format *) n'est pas standard, donc non garantie de fonctionner. Tu auras peut-être à modifier de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          character*10 s
          character*10 fmt
          integer k
          s = '123'
          fmt = '(i3)'
          read(s,fmt) i
          write(*,*) i ! Écrira 123
          end
    Toujours en F77, si la longueur de la chaîne à lire est variable, tu auras à ajuster dynamiquement le format de lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          s = '123'
          write(fmt,'(a,i1,a)') = '(i',len_trim(s),'3)'
          read(s,fmt) i
    Si len_trim() n'existe pas, tu devras l'écrire ou modifier le code. Il est aussi possible que l'idée te vienne d'utiliser un langage plus récent que 30 ans...

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Voici ce que j'ai trouvé..qu'en dites vous?
    Bonjour,

    Hier soir, je me suis intéressé à la fonction equivalence() et voici comment je l'ai utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROGRAM toto
    	INTEGER*4 x
    	CHARACTER*4 y
    	EQUIVALENCE (x,y)
    	y='titi'
    	write(*,'(A)') x
    	END
    Cette solution est plus adaptée pour moi (je voudrais migrer un logiciel de calcul de UNIX compilateur f77 sous LINUX compilateur g77).

    La conversion de type est faite de manière implicite sous f77 mais génère une erreur sous g77.

    J'ai modifié les parties de codes qui créaient cette erreur et maintenant cela fonctionne.

    Merci pour votre aide.

    PS: la fonction ichar() ne fait que convertir le premier caractère de la chaîne que l'on met en argument en un entier. Elle renvoit la valeur ascii du caractère.

    Si vous avez X=ichar('m1'), Y=ichar('m2') et Z=ichar('m3') alors => X=Y=Z

  5. #5
    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 commande equivalence ne converti pas les caractères en entier et vise versa. Elle permet à plusieurs variables d'occuper le même espace mémoire.

    Si tu assigne '1' à la variable C, tu obtiendras l'entier 49 via un equivalence (soit la valeur interne du caractère '1') ou un ichar() et l'entier 1 via une lecture internal (voir ma réponse précédente).

    Pour le ichar(), tu as raison qu'elle converti un caractère seulement (le 1er). Pour convertir plusieurs caractères, tu dois l'utiliser sur chacun. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i = ichar(C(4:4))*256**3 + ichar(C(3:3))*256**2 + ichar(C(2:2))*256 + ichar(1:1))
    En terminant, la conversion via ichar() ou equivalence est sensible à l'«endianness» de l'architecture. Dans l'exemple ci-haut, je suppose du little-endian.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/11/2006, 20h20
  2. Réponses: 7
    Dernier message: 20/09/2006, 14h42
  3. Comment découper une chaîne de caractères en VBA
    Par TomPad dans le forum Access
    Réponses: 3
    Dernier message: 23/06/2005, 10h58
  4. Réponses: 5
    Dernier message: 15/02/2005, 19h07
  5. Réponses: 3
    Dernier message: 28/09/2003, 11h46

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