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 :

Manipulation de fichiers avec fortran


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Manipulation de fichiers avec fortran
    Bonjour à tous

    J'aurais une question par rapport à la manipulation création de fichier.
    En fait j'utilise un logiciel qui simule la saturation dans le temps dans un sol. Le fichier de sortie (plot.out) est monté comme suit

    VARIABLES = "X", "Y", "NmoleF", "So", "Sw"
    ZONE T = "3.000 ", I = 41 , J = 41, F=POINT
    0.0000 20.00 -10.00 0.0000 0.2000
    0.5000 20.00 -10.00 0.0000 0.2000
    1.000 20.00 -10.00 0.0000 0.2000
    1.500 20.00 -10.00 0.0000 0.2000
    ..
    ZONE T = "3.001 ", I = 41 , J = 41, F=POINT
    0.0000 20.00 -10.00 0.0000 0.2000
    0.5000 20.00 -10.00 0.0000 0.2000
    1.000 20.00 -10.00 0.0000 0.2000
    1.500 20.00 -10.00 0.0000 0.2000

    où x et y sont les coordonnées du maillage.

    La 5ème colonne (saturation) doit être extraite pour faire des manipulations.

    J'utilise donc le code fortran comp.f pour faire ceci.
    Cependant dans mon code je n'arrive pas à conserver les titres Zone T=...
    De plus, selon les simulations le nombre de zone varie, donc a moins d'augmenter manuellement les commandes suivantes dans le fichier comp.f, je ne vois pas comment faire

    do k=1,nz
    do i=1,nx
    nd = (k-1)*nx + i
    read(90,*) x(nd), z(nd), nmoleF(nd), So(nd), Sw(nd)
    enddo
    enddo

    write(91,4)(x(i),z(i),(xmoln(i,k), k=1,3), i=1,nn)
    4 format(1X,5e15.5)


    Est ce que vous auriez une solution svp

    Merci de votre aide

    NB les fichiers sont en pieces jointes

    Bonne journée

  2. #2
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    l'idée c'est de parcourir plusieur fois ton fichier texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    character(len=4) ::toto
    ...
    open(unit=40,file="plot.out",status="old",position="rewind",iostat=ios)
    NZONE=0
    do while(ios==0)
      read(unit=40,iostat=ios,fmt=*)toto
      if (toto=="ZONE") NZONE=NZONE+1
    end do
    ...
    à partir de là, tu connais le nombre de zone!
    tu peux donc réserver les tableaux avec la bonne taille, rembobiner le fichier et le lkire à nouveau avec toutes les informations.
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  3. #3
    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
    Autre piste : lire une ligne à la fois sous forme de chaîne de caractères, examiner le contenu, puis la traiter.

    Ça donne quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    character (100) Ligne
    ...
    nd = 1
    do
       read(90,'(a)',iostat = k) Ligne
       if (k /= 0) exit
       if (Ligne(1:4) /= 'ZONE') then
          read(Ligne,*) x(nd), z(nd), nmoleF(nd), So(nd), Sw(nd)
          nd = nd + 1
       endif
    enddo
    Entre la méthode proposée par genteur slayer et celle-ci, il n'y en a pas une de meilleur a priori. C'est vraiment une question de contexte.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup je vais essayer ca de suite

    bonne journée à vous

Discussions similaires

  1. Manipulation de fichiers avec un jar
    Par jose.hello dans le forum Build
    Réponses: 0
    Dernier message: 17/06/2010, 14h36
  2. Manipulation de fichiers avec Java
    Par C-Jay dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 18/05/2010, 16h36
  3. Manipulation de fichiers avec rails
    Par pjmorce dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 06/11/2007, 11h40
  4. Manipulation des fichiers avec pl/sql
    Par Answerplease dans le forum PL/SQL
    Réponses: 1
    Dernier message: 10/07/2007, 11h53
  5. Manipulation des fichiers avec fstream.
    Par Pragmateek dans le forum SL & STL
    Réponses: 4
    Dernier message: 04/04/2006, 13h12

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