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 :

[RESOLUS] lire une chaine du lettres deux-deux


Sujet :

Fortran

  1. #1
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut [RESOLUS] lire une chaine du lettres deux-deux
    salut
    je veut lire (abcdefgh)
    mais deux deux
    par exemple je définie une variable var
    et je veux que cette variable prendre a chaque foi deux lettres
    elle prend ab , après cd ....etc
    ???

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    je veut lire (abcdefgh)
    Qui se trouve où?
    Jean-Marc Blanc

  3. #3
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    par example
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          CHARACTER var*2
           open(5,file='don.txt',status='unknown')
           do i=1,4
          read(5,*) var
    .......
    dans le fichier don.txt se trouve un code comme sa
    je veut que var ne prend pas toute la valeur (abcdefgh) mais par une boucle (DO) a chaque fois le "var" prend 2 lettres
    pour i=1
    var=ab
    pour i=2
    var=cd
    .
    .
    .
    est ce que si possible ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,

    Pour lire une même ligne "par morceaux", on peut utiliser l'argument advance='no' de l'instruction read et préciser le format de lecture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            program read_file
     
            character(len=2) :: var
            integer :: i
     
            open(15,file='don.txt',status='unknown')
            do i=1,4
              read(15,fmt='(a2)',advance='no') var
              write(*,*)'i:',i,' var:',var
            enddo
     
            end program read_file
    Une remarque en passant: attribuer l'unité 5 au fichier est une très mauvaise idée (c'est usuellement préconnecté à l'entrée standard) ; d'une façon générale, il est préférable d'utiliser des valeurs plus grande que 10 pour les fichiers.

    Bonne continuation.

  5. #5
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Bonjour;
    Merci Ehouarn pour votre réponse
    j'ai essayé avec sa ...
    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
            character*2 var
            integer i,c(20)
     
           open(15,file='don.txt',status='unknown')
          open(unit=20,file='res.txt',status='unknown')
          do i=1,4
           read(15,rec=i,fmt='(a2)') var
          if(var.eq.'ab')then
           c(i)=0
           endif
           if(var.eq.'cd')then
           c(i)=1
           endif
           if(var.eq.'ef')then
           c(i)=2
           endif
           if(var.eq.'jh')then
           c(i)=3
           endif
     
           enddo
           write(20,*) (c(i),i=1,4)
           end
    le fichier don.txt
    mais le résultat n'est pas juste
    j'obtiens 0 0 0 0

    je sais pas pas ou est le problème !!!

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Bonjour,
    c'est normal, l'utilisation de l'argument "rec" n'est pas justifié dans votre cas. Je vous suggère de suivre le conseil d'Ehouarn
    Citation Envoyé par Ehouarn
    on peut utiliser l'argument advance='no' de l'instruction read
    De plus, plutot que des "if-endif", un "select-case" est plus approprié dans ce cas. Donc ca donnerai :

    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
     
          character*2 var
          integer i,c(20)
     
          open(unit=15,file='don.txt',status='unknown')
          open(unit=20,file='res.txt',status='unknown')
          do i=1,4
            read(15,fmt='(a2)',advance='no') var
            select case(var)
            case('ab')
              c(i)=0
            case('cd')
              c(i)=1
            case('ef')
              c(i)=2
            ...
            end select
           enddo
     
           write(20,*) (c(i),i=1,4)
           end

  7. #7
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\Users\AmineMak\AppData\Local\Temp\ccessai.f: In program `MAIN__':
    C:\Users\AmineMak\AppData\Local\Temp\ccessai.f:7: 
               read(15,fmt='(a2)',advance='no') var
               ^
    Unsupported READ control item at (^) -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported
    C:\Users\AmineMak\AppData\Local\Temp\ccessai.f:8: 
               select case(var)
               ^
    SELECT CASE on CHARACTER type (at (^)) not supported -- sorry
    quand j'ai essayé ce programe
    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
     
          character*2 var
          integer i,c(20)
     
          open(unit=15,file='don.txt',status='unknown')
          open(unit=20,file='res.txt',status='unknown')
          do i=1,4
            read(15,fmt='(a2)',advance='no') var
            select case(var)
            case('ab')
              c(i)=0
            case('cd')
              c(i)=1
            case('ef')
              c(i)=2
            case('jh')
              c(i)=3
     
            end select
           enddo
            write(20,*) (c(i),i=1,4)
           end
    je pense que le problème est dans mon compilateur !

  8. #8
    Membre éprouvé
    Homme Profil pro
    Ingénieur modélisation aérodynamique
    Inscrit en
    Juillet 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur modélisation aérodynamique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 105
    Par défaut
    Bonjour,

    Ca ressemble effectivement à un problème de compilateur qui ne reconnait pas l'argument "advance". Plus surprenant, apparement il refuse "select case" sur une chaine de caractère, ce qui est normalement autorisé en fortran.

    Pouvez-vous précisez la configuration de votre système ?
    compilateur , version, OS ?

  9. #9
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    compilateur :
    Force 3.0 b3 plus GNU Fortran 77 (G77)
    téléchargé
    http://force.lepsch.com/2009/05/downloads.html

    O.S:
    windows 7 32bit

  10. #10
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Bonjour,

    Ca ressemble effectivement à un problème de compilateur qui ne reconnait pas l'argument "advance". Plus surprenant, apparement il refuse "select case" sur une chaine de caractère, ce qui est normalement autorisé en fortran.
    Ce n'est pas un problème de compilateur mais de version de compilateur.

    advance et select case (entr'autres) ne sons pas inclus dans la norme FORTRAN77 mais apparaissent dans la norme Fortran 90.

  11. #11
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Citation Envoyé par sharingamak Voir le message
    compilateur :
    Force 3.0 b3 plus GNU Fortran 77 (G77)
    téléchargé
    http://force.lepsch.com/2009/05/downloads.html

    O.S:
    windows 7 32bit
    Comme écrit plus haut, il est normal qu'un compilateur FORTRAN77 rejette les instructions qu'il ne connait pas.

    Donc utiliser un compilateur Fortran 90/95 par exemple http://www.silverfrost.com ou http://www.g95.org

  12. #12
    Membre habitué
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Merci beaucoup a vous tous
    enfin j'ai terminé ce programme sans erreurs

    RÉSOLUS

Discussions similaires

  1. [Débutant] Prendre une chaine de texte entre deux balises d'un code source.
    Par megavigore33 dans le forum VB.NET
    Réponses: 7
    Dernier message: 09/12/2014, 23h05
  2. Remplacer une chaine de caractere entre deux balise
    Par xyrox dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2010, 14h11
  3. Extraire une chaine de caractaire entre deux critere
    Par hichemaouini dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 21/10/2009, 10h48
  4. diviser une chaine de caractères en deux chaines
    Par _n1n1_ dans le forum VB.NET
    Réponses: 2
    Dernier message: 15/05/2007, 16h42
  5. couper une chaine de caractère en deux ?
    Par fmh1982 dans le forum C++
    Réponses: 3
    Dernier message: 31/03/2007, 18h17

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