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 dans une ligne et une colonne precise


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Ecrire dans un fichier dans une ligne et une colonne precise
    je suis desole de vous deranger. Mais je code actuellement un programme fortran pour modeliser en volumes finis un echangeur thermique en flux croise. Ce qui complique c'est que j'ai plusieurs rangee de tubes.

    Mon probleme est pour ecrire et lire dans un fichier. Je m'explique j'ai decompose un tube en 50 elements et pour chaque element je veux ecrire la pression et le temperature de sortie. Je souhaite ecrire un fichier comme un tableau avec en colonne les elements et en ligne les differents tubes. Mais je peux pas declarer la variable comme tableau pour des problemes de memoire. En plus j'ai besoin de pouvoir faire lire ces valeurs par le code fortran, puisque j'utilise les valeurs precedemment ecrites comme conditions initiales de la 2eme rangee.

    Je ne sais pas si je me suis fait comprendre. Mais la ca fait quelques temps que je cherche sur le net ou dans des bouquins mais je ne trouve pas.

    Merci d'avance,

    PS : je m'excuse pour les accents mais je travaille sur clavier qwerty

  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!
    Je ne suis pas sur d'avoir bien compris ton problème, mais regarde du côté de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Open ( ... ,Access='Direct')
    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
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre reponse. Oui en effet, j'ai deja commence a regarder du cote de l'acces direct, mais je n'ai pas compris comment indiquer un numero de ligne ou de colonne.

    Encore merci, je vais essayer de creuser un peu plus.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    ok petit a petit je vais y arriver. Pour ecrire dans une colonne (cf : http://www.developpez.net/forums/d10...-acces-direct/)

    on doit ouvrir un fichier en acces direct et lui donner une taille d'ecriture si j'ai bien compris.

    INTEGER n_unit
    n_unit = 17
    OPEN(unit=n_unit, file='toto.dat', form='unformatted', access='direct', recl=8)

    Donc la j'ouvre mon fichier toto.dat, auquel j'attribue une valeur de stockage disque n_unit. Le fait d'ouvrir en acces direct me permettra de choisir mes colonnes par la suite. Enfin recl=8 est la taille de l'enregistrement.

    Jusque la c'est bon.

    Une fois le fichier ouvert, DA ZUMBA ecrit dedans comme ceci:

    Code :
    DOUBLE PRECISION var_double
    INTEGER n_rec
    ...
    var_double = 78.98d0
    ...
    n_rec = 1
    ...
    WRITE(17, rec=n_rec) var_double

    Donc la, il ecrit la variable var_double, dans la colonne (rec) numero n_rec.
    Jusque la j'ai compris.
    --------------------------------------------------------------------------

    Mais maintenant la question que je me pose est : comment choisir la ligne de l'enregistrement.

    Merci d'avance pour l'aide

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    bon suite des problemes. l'acces direct oblige a avoir une format unformatted. Comment on peut faire alors pour lire les donnees?
    Merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Points : 113
    Points
    113
    Par défaut
    et en définissant un fichier pour chaque tube?

  7. #7
    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
    Points : 1 346
    Points
    1 346
    Par défaut
    Un fichier à accès direct est une suite d'enregistrement de longueur fixe. Tu peux lire ou écrire un enregistrement précis. Ça n'a qu'une dimension.

    Tu ne peux donc pas stocker un tableau et accéder directement à un élément donné par ligne-colonne. Une solution consiste à représenter chaque élément sur un enregistrement distinct et d'avoir n x m enregistrements pour stocker un tableau (n,m) :

    (1,1),(2,1),...,(n,1),(1,2),(2,2),...,(n,m)

    L'élément (i,j) est alors stocké à l'enregistrement i + (j-1)*n.

    Sous réserve d'avoir toujours des enregistrements de même longueur, chaque enregistrement peut contenir plusieurs valeurs, par exemple : pression et température. RECL devra évidemment être défini conséquemment.

    (Il est aussi possible de représenter chaque colonne de ton tableau sur un enregistrement. Tu devras alors lire ou écrire la colonne au complet. Tu semble cependant rejeter cette représentation.)

    Comme tu l'a déjà suspecté, un tel fichier est difficile à consulter. Par défaut, un fichier à accès direct est binaire, mais rien ne t'empêche d'utiliser un fichier direct et formaté. Ce sera un peu plus facile à consulter (tu auras des nombres à l'écran, mais comme un fichier direct n'a pas de marqueur de records, ton fichier contiendra une seule ligne très longue. Pour faciliter la consultation externe du fichier, tu pourrais créer des enregistrements de la forme : colonne, ligne, pression, température, marqueur de fin de ligne. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    write(unit,'(2i6,2f8.4,a1,a1)',rec=...) col,lig,pression,temperature,char(13),char(10)
    char(13) + char(10) est le marqueur sous Windows, tu dois utiliser char(10) seulement sous Unix/Linux et (je crois) char(13) seulement sous Apple.

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par exemple :
    [code
    write(unit,'(2i6,2f8.4,a1,a1)',rec=...) col,lig,pression,temperature,char(13),char(10)
    [/code]
    La ligne qui m'a sauve la vie. on se rend rarement compte du petit chiffre qui est devant le f ou le i et aui correspond au format affiche a l'ecran dans le fichier texte.

    MERCI!!!! MERCI!!! MERCI!!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/02/2015, 10h13
  2. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  3. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. [VB6]créer une copie d'une ligne d'une table
    Par h82kev dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/02/2006, 16h08

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