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 :

Erreur sévère 62 : syntax error in format


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Erreur sévère 62 : syntax error in format
    bonjour,

    je sollicite votre aide pour le programme suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    integer :: i,j,m,taille,n,p,q,r,u,d,tailleout,b,f,g,h,l,debut,fin,truc
    real :: o,maxi,maxSB,lambdamax
    real, dimension(:,:),allocatable :: e,s,t,c
     character(99) :: inputfile,inputfile2
     character(1) :: k 
     character(99), dimension(:,:),allocatable :: a
    Le programme etant assez long, je ne poste que la partie a probleme
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    type *,'fichier .out :'
    read (*,'(a30)') inputfile
     
    OPEN  (UNIT =4,FILE =inputfile,form='formatted',status="old",action='read')
     
    tailleout=0
    do
    read (4,'(a1)',end=200) k
    tailleout=tailleout+1
    end do
    200 continue
     
    debut=tailleout-41
    fin=tailleout-4
     
    print *,'tailleout'
    print *,tailleout
     
    b=fin-debut+1
    print *,b
     
    allocate (a(1,tailleout))
    allocate (c(2,b))
    print *,size(c)
     
    rewind 4
     
    do d=1,tailleout
    read (4,'(a99)') a(1,d)
    end do
     
    print *,a(1,:)(41:44)
     
    do f=1,b
     
    read (   *,a(1,debut+f-1)(41:44)   ) c(1,f)
    read (   *,a(1,debut+f-1)(55:58)   ) c(2,f)
     
    enddo
     
    print *,c(1,:)
    print *,''
    print *,c(2,:)
    print *,''
     
    maxSB = maxval(c(2,:))
     
    do h=1,g
    	if (c(2,h)==maxSB) then
    	lambdamax=c(1,h)
    	endif
    enddo
     
    print *,'maxSB='
    print *,maxSB
    print *,'lambdamax='
    print *,lambdamax
    Le fichier .out est un fichier texte dont je cherche a lire. le tableau a contient une copie de ce fichier .out et je cherche a recopier certaines parties seulement dans un tableau a deux colonnes appele c. 'a' est au format 'char' et c au format 'real'. En effet, dans le fichier texte, il y a des donnees numeriques que je veux extraire.

    La compilation marche mais a l'execution j'ai le message d'erreur suivant :

    forrtl: info (58): format syntax error at or near 379
    forrtl: severe (62): syntax error in format, unit -4, file /dev/pts/2

    Auriez-vous une idee, svp?

    merci d'avance

  2. #2
    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,

    forrtl: info (58): format syntax error at or near 379
    Tu devrais préciser quelle est cette ligne 379, par rapport à la partie du programme que tu donnes.

    Sinon, les instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    read (   *,a(1,debut+f-1)(41:44)   ) c(1,f)
    read (   *,a(1,debut+f-1)(55:58)   ) c(2,f)
    sont plus que douteuses... tu demandes à lire l'entrée standard '*', avec les formats 'a(1,debut+f-1)(41:44)' et 'a(1,debut+f-1)(55:58)' ...
    ce n'est pas plutôt le contenu de a() que tu veux lire (et mettre dans c() )?

  3. #3
    Invité
    Invité(e)
    Par défaut
    en fait 379 n'est pas une ligne du programme mais une valeur contenue dans le fichier texte. Je vais jeter un coup d'oeil aux instructions read

  4. #4
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type *,'fichier .out :'
    read (*,'(a30)') inputfile
     
    OPEN  (UNIT =4,FILE =inputfile,form='formatted',status="old",action='read')
    forrtl: severe (62): syntax error in format, unit -4, file /dev/pts/2

    Il est extrêmement déconseillé d'utiliser de si petits nombres pour
    les unités logiques.
    Remplace 4 par 21, par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OPEN (UNIT = 21, ...)

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut Erreur dans la syntaxe read
    Bonsoir,

    Pour convertir des chaines de caractères en réels la syntaxe est la suivante :
    (il faut échanger le *, il arrive en seconde position)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    read ( a(1,debut+f-1)(41:44) ,* [,IOSTAT=IER, ERR=300]) c(1,f)
    read ( a(1,debut+f-1)(55:58) ,* [,IOSTAT=IER, ERR=400]) c(2,f)
    Les données entre crochet sont optionnelles et permettent de gérer les erreurs du read.

    Par contre pour la suite tu devrais employer la fonction maxloc au lieu de maxval cela te donnera l'indice du max dans le tableau c(2, : )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IndMax=maxloc(c(2,:))
    lambdamax=c(1,IndMax(1))
    La déclaration de IndMax est la suivante (c'est un tableau de rang 1 et de dimension 1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Integer, dimension(1) :: IndMax
    Désolé pour ma réponse tardive mais je viens de m'inscrire.

Discussions similaires

  1. [PDO] Erreur incompréhensible : 'SQLSTATE[42000]: Syntax error or access violation: 1064'
    Par cyril_k dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/12/2008, 12h12
  2. Réponses: 2
    Dernier message: 13/11/2008, 17h44
  3. Réponses: 5
    Dernier message: 13/07/2007, 14h51
  4. Réponses: 3
    Dernier message: 03/06/2007, 15h29
  5. Syntaxe ERROR: quel'un peut me dire ou y a une erreur
    Par jam92400 dans le forum Access
    Réponses: 14
    Dernier message: 27/06/2006, 18h06

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