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 :

Lecture de matrice dans un fichier de données (.dat)


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut Lecture de matrice dans un fichier de données (.dat)
    Bonjour à tous et toutes,

    voici mon problème : Je souhaite lire une partie d'un Fichier.dat contenant texte et données de la forme. Voici un extrait:

    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
     
    TITLE = "...                           "
    TITLE = "...     "
    TITLE = "...                                "
    VARIABLES = "X", "Y", "Z", "Zone","Head","Vx","Vy","Vz","Qx","Qy","Qz","salt"                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    ZONE  T=" 1.0000000000E+00", DATAPACKING=BLOCK, N=  16284, E=   7920, ZONETYPE=FEBRICK, VARLOCATION=([      4,      6,      7,      8,      9,     10,     11]=CELLCENTERED)                                                                                                                                                                                                                                                                                                                                                    
    # x
       0.0000000000000000        25.000000000000000        50.000000000000000        75.000000000000000        100.00000000000000     
       125.00000000000000        150.00000000000000        175.00000000000000        200.00000000000000        225.00000000000000     
       250.00000000000000        275.00000000000000        300.00000000000000        325.00000000000000        350.00000000000000   
    ...
    ...
    # concentration salt
       0.0000000000000000       0.64720330011049226E-025  0.17833386042487199E-024  0.37802284411445552E-024  0.72932897799838601E-024
      0.13478306362085956E-023  0.24373618438863777E-023  0.43573154689106475E-023  0.77410535444477779E-023  0.13704135817649153E-022
      0.24210465387402711E-022  0.42716322963177314E-022  0.75304094444452978E-022  0.13267992530729645E-021  0.23369553087384882E-021
      0.41155676324062088E-021  0.72476631090388178E-021  0.12764107173106682E-020  0.22481606524337324E-020  0.39602163975608679E-020
    Mon objectif : construire un tableau après lecture des données contenues dans le header # concentration salt ci-dessus. J'ai choisi correctement les indices de début et de fin de lecture. Je pense que mon problème survient au niveau du format. En effet, mon .exe plante à ce niveau là.

    Voici un extrait de mon code
    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
    18
    19
    20
    21
     
        rewind(unit=numfichCONC, iostat=err) ! mon fichier .dat
     
        ! CONSTRUCTION D'UN VECTEUR CONTENANT LES Ci POUR LES TL
     
        open(unit=numfichconc_TL1,file='conc_TL1.dat', access='sequential', form='formatted', action = 'write', iostat=err) ! nouveau fichier qui va contenir les valeurs de mon nouveau tableau
        k = 1
        if (mod(nds,5) .EQ. 0) then
     
            do i = nb_l_TL1_conc + 1,nb_l_TL1_conc + 1 + (nds/5) - 1
    !            read(unit=numfichCONC,fmt='(2x,(f24.0),2x,(f24.0),2x,(f24.0),2x,(f24.0),2x,(f24.0))',iostat=err) (conc_TL1(k,j),j=1,5)
                 k = k +1
            end do
         else
     
            do i = nb_l_TL1_conc + 1,nb_l_TL1_conc  + (nds/5)
     
                read(unit=numfichCONC,fmt='(2x,(f24.0),2x,(f24.0),2x,(f24.0),2x,(f24.0),2x,(f24.0))',iostat=err) (conc_TL1(k,j),j=1,5)
                k = k +1
            end do
        end if
    je pense donc que l'erreur provient du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read(unit=numfichCONC,fmt='(2x,(f24.17),2x,(f24.17),2x,(f24.17),2x,(f24.17),2x,(f24.17))',iostat=err) (conc_TL1(k,j),j=1,5)
    J'ai choisi 24 pour le nombre de chiffre représenté et 17 pour le nombre de décimale comme indiqué pour les valeurs de # concentration salt

    Auriez-vous un idée du format adapté?

    Je vous remercie d'avance

    S.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Réponse à moi-même et pour d'autres si jamais :

    1) j'ai mal déclaré mon tableau (inversion des lignes et des colonnes)
    2) commande plus adaptée et simplifiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                            read(unit=numfichCONC,fmt='(5(1x(e25.17)))',iostat=err) (conc_TL1(k,j),j=1,5)
                            write(unit=numfichconc_TL1,fmt='(5(1x(e25.17)))') (conc_TL1(k,j),j=1,5)
    Problème restant : différence entre valeurs de mon fichier.dat de départ et les valeurs copiées dans un tableau


    Valeurs de départ : 0.21430646437917665E-001 0.91034990482535081E-002 0.35957688223854124E-001 -0.14165365035257518 0.58518169337599103E-001
    Valeurs copiées : 0.21430647000670433E-01 0.91034993529319763E-02 0.35957686603069305E-01 -0.14165365695953369E+00 0.58518167585134506E-01

    Si quelqu'un connaît l'origine de cette dissimilitude. J'ai essayé de joué sur l'espace alloué à l'exposant, mais non.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 5
    Par défaut
    Eh ben, voilà :

    il suffit de déclarer son tableau en double précision de cette manière :

    double precision, dimension (dim1,dim2) :: tab

    S.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/03/2010, 09h58
  2. Lecture de matrice dans un fichier
    Par wadja_86 dans le forum Débuter
    Réponses: 3
    Dernier message: 01/03/2009, 22h14
  3. Réponses: 5
    Dernier message: 05/04/2008, 12h49
  4. Problème lecture de nombre dans un fichier en c++
    Par knecmotet dans le forum C++
    Réponses: 1
    Dernier message: 28/10/2004, 15h48
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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