J'utilise une structure contenant, pour chaque année, une liste de mois (qui est elle-même une structure contenant une liste de noms de fichiers), comme suit :
Code :
TYPE MOIS
CHARACTER (len=2) :: Numero_Mois
CHARACTER (len=19), DIMENSION(:), POINTER :: Noms_Fichiers ! Liste des fichiers (sessions) du mois
END TYPE
TYPE ANNEE
CHARACTER (len=4) :: Numero_Annee
TYPE(MOIS), DIMENSION(:), POINTER :: Mois ! Liste des mois avec des mesures
END TYPE
Je ne connais pas à l'avance le nombre de mois qui vont être enregistrés pour une année, tout comme je ne sais pas combien de fichiers peuvent appartenir à un mois (cela varie fortement en fonction des années et des mois). D'où la nécessité de l'allocation dynamique donc...
Dans mon module, j'utilise une première fonction allouant la place nécessaire à l'enregistrement de données dans une variable de type ANNEE. J'aimerais que cette fonction renvoie donc cette variable, afin de l'utiliser en entrée d'une autre fonction, qui va effectuer des calculs dessus.
Code :
MODULE Mon_module
IMPLICIT NONE
TYPE MOIS
CHARACTER (len=2) :: Numero_Mois
CHARACTER (len=19), DIMENSION(:), POINTER :: Noms_Fichiers ! Liste des fichiers (sessions) du mois
END TYPE
TYPE ANNEE
CHARACTER (len=4) :: Numero_Annee
TYPE(MOIS), DIMENSION(:), POINTER :: Mois ! Liste des mois avec des mesures
END TYPE
CONTAINS
SUBROUTINE Main
IMPLICIT NONE
TYPE(ANNEE), DIMENSION(:), ALLOCATABLE :: Data
CALL Enregistrement_donnees(Data)
PRINT *,Data
CALL Traitement_donnees(Data)
END SUBROUTINE Main
END MODULE
Problème : impossible de récupérer ce que contient la variable de type ANNEE, avec ce message d'erreur :
Citation :
PRINT *,Data 1 Error: Data transfer element at (1) cannot have POINTER components
Je ne comprends pas vraiment ce que cela signifie. J'ai eu beau chercher sur internet, les structures dynamiques existent bien et fonctionnent parfaitement, que ce soit avec une subroutine ou une fonction. Est-ce que quelqu'un verrait ce qui cloche ici svp ?
Merci d'avance pour votre aide.
Message édité par infrarouge77 le 06-03-2014 à 14:49:50
Marsh Posté le 06-03-2014 à 14:48:48
Bonjour,
J'utilise une structure contenant, pour chaque année, une liste de mois (qui est elle-même une structure contenant une liste de noms de fichiers), comme suit :
Je ne connais pas à l'avance le nombre de mois qui vont être enregistrés pour une année, tout comme je ne sais pas combien de fichiers peuvent appartenir à un mois (cela varie fortement en fonction des années et des mois). D'où la nécessité de l'allocation dynamique donc...
Dans mon module, j'utilise une première fonction allouant la place nécessaire à l'enregistrement de données dans une variable de type ANNEE. J'aimerais que cette fonction renvoie donc cette variable, afin de l'utiliser en entrée d'une autre fonction, qui va effectuer des calculs dessus.
Problème : impossible de récupérer ce que contient la variable de type ANNEE, avec ce message d'erreur :
PRINT *,Data
1
Error: Data transfer element at (1) cannot have POINTER components
Je ne comprends pas vraiment ce que cela signifie. J'ai eu beau chercher sur internet, les structures dynamiques existent bien et fonctionnent parfaitement, que ce soit avec une subroutine ou une fonction. Est-ce que quelqu'un verrait ce qui cloche ici svp ?
Merci d'avance pour votre aide.
Message édité par infrarouge77 le 06-03-2014 à 14:49:50