Lecture d'un fichier:problème récupération en-tête +mesures [FORTRAN] - Divers - Programmation
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...).
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à :
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 :
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!