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 :

écriture vecteur dans fichier


Sujet :

Fortran

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut écriture vecteur dans fichier
    Hello

    J'ai de nouveau un petit soucis que je n'arrive pas à résoudre, peut-être sauriez-vous m'aider.

    Dans une boucle, je souhaite écrire dans un fichier un tableau de dimension 1 sur une même ligne, puis à l'itération suivante je voudrais passer à la ligne en dessous pour écrire les nouvelles valeurs sur une même ligne, ainsi de suite.

    Voilà ce que j'ai écrit mais qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    do i=1,p
    open(1,nomfich,formatted,unknown)
    call bidule(RB)
    write(1,'(f31.30)')RB
    close(1)
    enddo
    où RB est un vecteur, que je veux donc écrire sur une ligne différente à chaque itération.

    Si vous avez la solution ça me soulagerait !

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    c'est probablement la question qui est la plus fréquemment posée mais:

    ça veut dire quoi "ça ne fonctionne pas" ?

    là par exemple dans ton cas le spécificateur de format ne devrait afficher qu'un réel de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .123456789012345678901234567890
    donc pas de nombres négatifs, ni de nombres supérieurs à 1.

    si ton vecteurs contient 3 nombres:

    par exemple

    s'il contient un nombre inconnu de nombre, mais que tu sais borner (par exemple pas plus de 100):

    si en plus tu ne sais pas le borner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do i=1,n
        write(unit,'(f9.6,x)',advance='no')RB(i)
    end do
    write(unit,*)

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut
    Merci de la réponse.

    J'ai vu que la question était récurrente, mais aucune solution proposée n'a fonctionné (cad que ça ne m'affiche pas la valeurs comme je veux).

    Par contre petite précision sur ma boucle : elle est faite sur j, mais les coeff de RB ne sont pas les RB(j). Le call bidule me stocke la valeur de RB.

    J'ai déja essayé avec advance='no', ou avec un $ à la fin du format, mais sans résultat.

    En fait ça fonctionne lorsque j'écris mon format sous la forme 8(f32.31), cad en mettant explicitement que j'ai 8 termes dans mon vecteurs. Mais je voudrais pouvoir changer ce nombre de termes, l'idéal serait de pouvoir écrire n(f32.31), le nombre n étant obtenu par un read*,n.

    Une petite idée?

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    ok, dis nous comment tu déclares RB:

    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    real,dimension(1:100):: RB
    dis nous aussi avec un exemple comment tu veux que ton fichier texte apparaisse.

    ensuite, montre nous comment est ta boucle

    on peut pas deviner ce que tu ne nous dis pas, même si c'est évident pour toi.

    bref, pose une question PRECISE et tu auras une réponse PRECISE.

    merci

  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
    Par défaut
    Plusieurs choses à dire :
    • Si tu open le fichier dans la boucle, tu dois utiliser la close "append" pour déplacer le pointeur à la fin et ajouter une ligne. La solution classique est plutôt d'ouvrir le fichier avant la boucle et de le fermer après la boucle.
    • Il est fortement conseillé d'utiliser un unit > 10, et non 1. Les petits units sont souvent prédéfinis par le compilateur.
    • Pour écrire le vecteur sur une ligne, le plus simple est d'avoir un seul write écrivant tout le vecteur d'un coup. Le format peut prévoir un nombre d'élément supérieur à la taille du vecteur. Ex "(99999f13.6)"

    Si la solution 99999 ne te convient pas, tu peut utiliser la technique suivante. Le format peut être une variable caractère. Tu peux donc construire le format à l'exécution. Il est possible "d'écrire" dans une variable caractère plutôt que dans un fichier avec un write. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    character (40) :: MonFormat
    ...
    << saisie de n >>
    ...
    write(MonFormat,'(a,i0,a)') '(',n,'f13.6)'
    ...
    write(11,MonFormat) RB
    ...
    Note: Il est déconseillé d'utiliser la technique write(11,'(<n>f13.6)') n,RB car elle est propriétaire (DEC --> Compaq --> Intel)

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 70
    Par défaut
    je crois que je vais utilisé la technique du 99999 devant le format, c'est la plus simple

    merci

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

Discussions similaires

  1. écriture bizarre dans fichier text
    Par sniper59 dans le forum VB.NET
    Réponses: 2
    Dernier message: 02/02/2015, 09h35
  2. écriture/lecture dans des fichiers
    Par rafale001 dans le forum C
    Réponses: 14
    Dernier message: 02/03/2007, 16h59
  3. Besoin d'aide écriture dans fichier
    Par boniface dans le forum Modules
    Réponses: 3
    Dernier message: 29/01/2007, 18h06
  4. Réponses: 2
    Dernier message: 15/11/2005, 09h58
  5. écritures concurrentes dans un fichier
    Par djmalo dans le forum C
    Réponses: 9
    Dernier message: 06/03/2005, 01h45

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