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 :

Ecrire dans un fichier


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut Ecrire dans un fichier
    bonjour
    je débute en fortran et j'ai un code que je dois expliciter;je passe par les instruction write pour stocker les vitesses u et v ,la pression la pression corrigée et la température dans un fichier nommé 'res':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open(50,file='res.dat')
    write(50,*) ((u(i,j),i=1,imax),j=1,jmax+1)
    write(50,*) ((v(i,j),i=1,imax+1),j=1,jmax)
    write(50,*) ((p(i,j),i=1,imax+1),j=1,jmax+1)
    write(50,*) ((pp(i,j),i=1,imax+1),j=1,jmax+1)
    write(50,*) ((te(i,j),i=1,imax),j=1,jmax+1)
    mais une fois j'obtient ces valeurs je n'arrive pas à distinguer qui est qui?
    en fait le résutat est un fichier avec 3 colonne chacune avec des milliers de valeurs!
    Pouvez vous m'aidez svp c'est très urgent!
    merci

  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!
    Ce que tu cherches à faire n'est pas clair:
    • Quelle est la signification des compteurs i et j, ainsi que des paramètres imax et jmax?
    • Pourquoi certains compteurs vont-ils jusqu'à imax et jmax, et d'autres jusqu'à imax+1 et jmax+1?
    • Pourquoi n'utilises-tu pas un format explicite à la place du * ?

    Enfin, pour gagner du temps, dis-nous avec précision ce que tu souhaiterais obtenir fans ton fichier.
    Jean-Marc Blanc

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Par défaut
    Commence par mettre une ligne vide entre l'écriture des variables. Cela separera ton fichers en blocs par variable.
    Sinon il ecrit u(1,1)u(2,1),u(3,1)... les un a la suite des autres. Les changements de ligne ne sont pas imposés donc le programme les mets ou il veut.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 10
    Par défaut
    merci por votre aide!
    i,j sont des compteurs spatiaux du maillage mais problème reside en fait dans l'affichage au niveau du fichier.dat
    les valeurs sont sous forme de 3 grande colonnes et je ne peux pas ditinguer les variables les uns des autres
    merci encore
    Nom : Sans titre.JPG
Affichages : 79
Taille : 154,2 Ko

  5. #5
    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!
    En fait, tu ne comprends pas ce que ton programme fait en réalité. Alors, prenons un cas simple, par exemple avec imax=2 et jmax=3. Ton fichier comportera 5 "lignes" parce que tu as 5 instructions write.
    La première "ligne" contiendra imax*(jmax+1)=8 valeurs:
    u(1,1) u(2,1) u(1,2) u(2,2) u(1,3) u(2,3) u(1,4) u(2,4)
    La deuxième "ligne" contiendra (imax+1)*jmax=9 valeurs:
    v(1,1) v(2,1) v(3,1) v(1,2) v(2,2) v(3,2) v(1,3) v(2,3) v(3,3)
    Je passe par dessus les "lignes" correspondant à p, pp et te. Ensuite, pense que ton fichier res.dat est sur le disque dur de ton ordinateur; tu ne peux donc pas le voir directement. Pour le visualiser, tu utilises un "éditeur de texte" qui va considérer chacune de tes valeurs comme un "mot" d'une vingtaine de caractères. Or cet éditeur est programmé pour n'admettre des lignes de longueur limitée; c'est pourquoi il insère automatiquement un saut de ligne après une valeur sur trois.

    Alors, je le répète parce que tu ne m'as pas répondu sur ce point, dis-nous ce que tu veux obtenir.

    Jean-Marc Blanc

  6. #6
    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
    Jean-Marc, sans remettre en question ta réponse, si jmax et imax sont plus élevés, le fait d'utiliser un format libre fait en sorte que le résultats de chaque write sera écrit sur plusieurs lignes. Il devient alors difficile de se retrouver. Imagine si imax et jmax sont de l'ordre de 100, le fichier peut facilement avoir 5000 lignes...

    Pour bagogan : compte tenu du « très urgent », ma suggestion arrive probablement trop tard, mais il y a plusieurs pistes de solution :
    • écrire les résultats comme un long ruban de "NomDuVecteur",i,j,Valeur(i,j). Tu peux alors utiliser un outil externe pour tabuler le résultat.
    • écrire les résultats en forçant une tabulation. Par exemple : générer une ligne d'indice comme entête de colonnes, puis écrire chaque rang dans la forme: j,valeur(1,j),valeur(2,j),... Tu devras alors utiliser des formats explicites pour éviter le retour à la ligne des formats libres lorsque la ligne est trop longue.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Par défaut
    Il me semble que remplacer la ligne d'écriture de u par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do j= 1,jmax+1
        write(50,'10(1x,g10.4),/') (u(i,j),i=1,imax)
    end do
    write(50,*)
    permet d'écrire u en mettant 10 valeurs par ligne

Discussions similaires

  1. Ecrire \" dans un fichier
    Par photorelief dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2005, 15h56
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum Général Java
    Réponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    Réponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace à un trigger ?
    Par zigoo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    Réponses: 4
    Dernier message: 20/02/2003, 15h44

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