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 :

Quel format pour écrire un tableau dans un fichier ?


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Quel format pour écrire un tableau dans un fichier ?
    Bonjour,
    Voila mon problème, je veux écrire un tableau de n lignes et m colonnes dans un fichier avec le format E14.7 pour chaque valeur de mon tableau. J'ai regardé sur la toile et j'ai trouvé que le format pouvait être répété mais dans mon cas je ne connais pas le nombre de colonnes a l'avance.

    Voila ce que je pense faire mais je ne sais pas quoi mettre dans le format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    open(11,file="test.txt")
     
    100 format (???)
     
    do i=1,n
       write(11,100) A(i,:)
    end do 
     
    close(11)
    Merci d'avance a tous ceux qui me répondront

  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 : 83
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Tu mets dans ton format le plus grand nombre de colonnes que tu risques de rencontrer. Si le nombre réel de colonnes est plus petit, ça n'a pas d'importance.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    La taille de ma matrice peut être très grande (de l'ordre du milliard). Cela ne gène pas de mettre une taille de 10^30 dans le format ?

  4. #4
    Membre éprouvé
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Points : 982
    Points
    982
    Par défaut
    Pour le nombre maximal je n'ai pas de réponse. Je ne sais pas si tu peux mettre 10^9 dans le format mais à priori je ne vois pas pourquoi tu ne pourrais pas. Ce qui risque de bloquer mais là encore je ne suis pas sur, c'est que le nombre de colonne dans un fichier peut être limité. Mais ça ça va dépendre de ton système.

    Pour ce qui est d'adapter le format je peux te conseiller la chose suivante :

    Tu déclare fmt une chaine de caractère et avant d'imprimer ton tableau tu écrit
    dans fmt le bon format. Si tu as m colonnes :

    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
     
     
    character(len=100)::fmt,num
     
    ! tu testes la taille de m
    if ( m < 10 ) then
      write(num,"(i1)")m
    else if (m < 100) then
      write(num,"(i2)")m
    ....
    end if
     
    fmt = trim( adjustl( num ) )//"E14.7"
     
    do i=1,n
       write(11,fmt) (A(i,k),k=1,m)
    end do
    Bien sur si tu as facilement une borne supérieure de m la méthode de JM Blanc est plus efficace.

    J'attire juste ton attention sur le fait que si tu as 10^9 lignes, dans tous les cas ton tableau sera illisible. Pour ce genre de matrice, l'impression dans un fichier se fait souvent dans l'ordre croissant de i+j avec un nombre donné d'élément par ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write(11,"(5E14.7)")( ( A(i,k),k=1,m) i=1,n)
    Certains codes vont même jusqu'à remplacer la matrice par un vecteur ligne.

    PS : de façon générale il vaut mieux écrire les boucles implicites. D'ailleurs ifort te sortiras un warning si tu ne le fais pas.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup à vous deux pour vos réponses.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/04/2015, 14h39
  2. Réponses: 2
    Dernier message: 07/02/2013, 20h20
  3. Réponses: 2
    Dernier message: 17/04/2012, 13h04
  4. Réponses: 9
    Dernier message: 21/04/2008, 16h13
  5. Réponses: 1
    Dernier message: 30/03/2005, 15h03

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