[FORTRAN] Lecture d'un fichier:problème récupération en-tête +mesures

Lecture d'un fichier:problème récupération en-tête +mesures [FORTRAN] - Divers - Programmation

Marsh Posté le 03-03-2014 à 10:43:38    

Bonjour,  
 
Je débute dans la lecture des fichiers avec Fortran. Je souhaiterai enregistrer tout un tas de mesures + des informations d'en tête d'un fichier qui a cette forme là :
 

Citation :


nomdufichier.txt          DUREE : 105 mn
Paris                        Capteur1
DATE       : 28/02/2014        HEURE DEB : 14:30:00       FIN : 14:35:00
LATITUDE         : -60.00        LONGITUDE         : 140.00
CIEL                 : clair
ALTITUDE          : 160
Mesure1     Mesure2     Mesure3
0.19E+01   0.13E+02   0.25E+03
0.58E+01   0.13E+02   0.26E+03
0.64E+01   0.11E+02   0.75E+03
0.72E-01    0.12E+02   0.99E+02


 
 
 
L'objectif est de récupérer dans un type prédéfini toutes les infos de l'en-tête : nom du fichier, la durée des mesures (105), le lieu (Paris), le capteur, la date, les heures de début et de fin, la météo et l'altitude. Dans une variable d'un 2ème type prédéfini, je souhaiterai avoir les 3 réels d'une même ligne
 
Mon programme suit :
 

Citation :


PROGRAM Monprog
IMPLICIT NONE
 
! Déclaration des types dérivés
TYPE MESURE
     REAL :: Mes1
     REAL :: Mes2
     REAL :: Mes3
END TYPE
 
TYPE ENTETE
     CHARACTER(len=16) :: Nom_fichier
     CHARACTER(len=14) :: Duree
     CHARACTER(len=5)   :: Ville
     CHARACTER(len=8)   :: Capteur
     CHARACTER(len=23) :: Date
     CHARACTER(len=20) :: Heure_debut
     CHARACTER(len=14) :: Heure_fin
     CHARACTER(len=25) :: Latitude
     CHARACTER(len=25) :: Longitude
     CHARACTER(len=25) :: Etat_ciel
     CHARACTER(len=25) :: Altitude
END TYPE
 
TYPE TABLEAU_MESURES
     CHARACTER(len=31) :: Legende
     TYPE(MESURE), DIMENSION(4) :: Mesures
END TYPE
 
! Programme
 
IMPLICIT NONE
CHARACTER(len=255) :: Fichier !Adresse du fichier à lire
TYPE(ENTETE) :: Header
TYPE(TABLEAU_MESURES) :: Data
INTEGER (kind=4) :: ios, Size_record
INTEGER (kind=1) :: erreur
 
INQUIRE(IOLENGTH=Size_record) Header, Data !Taille de l'enregistrement à lire enregistrée dans Size_record
 
OPEN( UNIT=1,   &
 FILE=Fichier,   &
 FORM="formatted", &
 ACCESS="direct",  &
 STATUS="old",   &
 ACTION="read",  &
 RECL=Size_record,  &
 IOSTAT=ios   )
 
IF (ios/=0) THEN
 erreur = 0
ELSE
 READ(UNIT=1, REC=1) Header, Data
END IF
 
CLOSE(UNIT=1)
 
PRINT *,Header
PRINT *,Data
 
END PROGRAM


 
Les PRINT* m'affichent des caractères sans aucun sens, je suppose donc qu'il y a un problème de lecture (au niveau des formats, des dimensions, ou lors de l'ouverture du fichier....). Là je ne sais pas trop ce qui ne marche pas, pourriez vous me donner un petit coup de main svp ?
 
 
Merci d'avance!

Reply

Marsh Posté le 03-03-2014 à 10:43:38   

Reply

Marsh Posté le 04-03-2014 à 16:20:09    

J'ai l'impression que le fichier que tu nous as présenté en début de post n'a pas été enregistré via un programme qui utilises la structure que tu as définie (ENTETE).
Si j'ai raison, fais un test : tu crées une variable de type ENTETE, tu y mets des données puis tu enregistres dans un fichier txt. Ensuite, tu essayes de le relire en le chargeant dans une structure ENTETE. Si tout s'affiche correctement, c'est OK et c'est juste que le fichier que tu essayes de lire comporte de petites différences (ex : des caractères non imprimables, des espaces ou d'autres séparateurs...).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed