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 tableau à 2 dimensions


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut lecture de tableau à 2 dimensions
    Bonjour (encore )

    Je suis entrain de lire un fichier texte , ce fichier possède des données par colonnes disposées ainsi sur n lignes:

    le problème c'est que je souhaite avoir une seule variable du genre X(5,n) ou stocker le tout et me débarasser des Xi.

    Malheureusement mon code ne marche pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		do i = 1, n  ! nombre de ligne du fichier
    		do j = 1, n_Xi  ! nombre de colonnes
    		read(7,*) X(j,i)
    		enddo
                    enddo
    est ce que vous auriez une idée de comment procéder à la lecture de ce tableau?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Par défaut
    Salut,

    Alors, pour pouvoir lire ce fichier, s'il ne contient que des valeurs numériques essayes en mettant le tableau X sous la forme d'un tableau dynamique lors de la déclaration des variables puis:
    !Declaration des variables
    Allocatable, dimension (:,: ) :: X
    ...
    Allocate(X(n_Xi,n))

    read(7,*) X
    ...

    Deallocate (X)
    Si je ne me trompes pas, ça devrait marcher.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Bonjour,
    tu veux dire qu'il suffit que j'ecrive juste

    read(7,*) X

    sans préciser les indices i,j pour que ça marche? pas de boucle do?

    (j'ai déjà alloué la taille du tableau par un allocate )

  4. #4
    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
    Oui ça va fonctionner, MAIS :

    La lecture d'un tableau entier par un format libre (*) offre très peu de contrôle. Je te suggère donc, suite à la lecture, de valider si possible le contenu du tableau.

    C'est ce problème de contrôle qui oblige souvent à découper la lecture en ligne et à utiliser une variable caractère intermédiaire. Tu trouveras plusieurs problèmes résolus par cette stratégie dans le forum.

  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
    Citation Envoyé par manaliac Voir le message
    ...
    Je suis entrain de lire un fichier texte , ce fichier possède des données par colonnes disposées ainsi sur n lignes:

    le problème c'est que je souhaite avoir une seule variable du genre X(5,n) ou stocker le tout et me débarasser des Xi.

    Malheureusement mon code ne marche pas!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		do i = 1, n  ! nombre de ligne du fichier
    		do j = 1, n_Xi  ! nombre de colonnes
    		read(7,*) X(j,i)
    		enddo
                    enddo
    ...
    Le problème est qu'à chaque read, il y a saut de ligne. Ton programme ne lit donc que le X1 de chaque ligne. Tu dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		do i = 1, n  ! nombre de ligne du fichier
    		   read(7,*) X(:,i)
                    enddo
    ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		do i = 1, n  ! nombre de ligne du fichier
    		   read(7,*) (X(j,i),j=1,n_Xi)
                    enddo
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		do i = 1, n  ! nombre de ligne du fichier
    		   read(7,*) X(1:n_Xi,i)
                    enddo
    Il serait également possible de combiner ta stratégie (2 boucles) avec la clause advance='no', mais c'est beaucoup trop compliqué pour ton problème...

Discussions similaires

  1. Lecture tableau multiple dimension
    Par Pelote2012 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/02/2013, 11h12
  2. [Tableaux] Lecture d'un tableau multi-dimension
    Par nico341 dans le forum Langage
    Réponses: 16
    Dernier message: 15/04/2008, 15h24
  3. Réponses: 4
    Dernier message: 29/11/2006, 12h00
  4. [Collections] lecture tableau 2 dimensions
    Par heloise dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/09/2004, 10h49
  5. Réponses: 23
    Dernier message: 21/08/2003, 07h16

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