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 fichier binaire et inversion d'octets


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Lecture fichier binaire et inversion d'octets
    Bonjour,

    Je veux utiliser un fichier binaire dans un code fortran en l'ouvrant avec un bout de code que j'ai récupéré

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	DIMENSION GRID(2500)
    	INTEGER*2 GRID	
    	open(1,file='19981207RR',form='binary')
    	read(1,end=99)(GRID(i),i=1,2500)
    99     close(1)
    mais la personne qui m'envoie le fichier binaire me dit qu'il faut "inverser les octets car le fichier a été généré sur une machine linux".

    Pour moi, c'est du chinois.

    Si je lis les fichiers directement avec le bout de code ci-dessus, cela ne correspond pas à ce que je dois obtenir.

    Je travaille sur PC, je n'ai pas Linux, et je suis méga débutant en programmation d'où mon appel à l'aide. Merci pour vos conseils.

    Zoro

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    L'histoire d'inverser les octets, c'est un probleme d'endianness. Cela depend du processeur, pas du systeme d'exploitation. Si tu utilises un processeur compatible x86 (Intel, AMD) comme la personne qui a fourni les donnees, alors tu n'as rien a faire : c'est du little-endian des deux cotes. Par contre, si les donnees ont ete crees sur une machine a processeur PowerPC, par exemple, alors les donnees sont au format big-endian et effectivement, il faudrait inverser les octets. C'est une limitation du format binaire pur : il n'est pas portable directement d'une machine a l'autre.

    Pour lire ton fichier, utilise un Fortran un peu plus standard que celui que tu proposes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    integer*2 grid(2500)
    ...
    open(unit=10, file='19981207RR', access='direct', form='unformatted', recl=5000)
    read(10, rec=1) grid
    close(10)
    Le recl donne la longueur d'un enregistrement en octets [record length] (ici, je lis tout en une fois, i.e. 2500 entiers de deux octets). Si tu veux faire une boucle (memoire limitee, par exemple), il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    open(unit=10, file='19981207RR', access='direct', form='unformatted', recl=2)
    do nrec = 1, 2500
      read(10, rec=nrec) grid(nrec)
    enddo
    close(10)

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Merci
    Ca marche avec le code que tu m'as donné, je l'ai juste adapté au nb total d'entiers de ma grille. Merci beaucoup.
    Z

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par zoro_le_renard
    Ca marche avec le code que tu m'as donné, je l'ai juste adapté au nb total d'entiers de ma grille. Merci beaucoup.
    De rien. Remarque que j'avais fait une erreur dans la version 'boucle'. Le recl du OPEN n'etait pas correct. C'est maintenant corrige.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut signification de rec
    Da Zumba

    j'ai juste besoin d'une précision, que veut dire le
    rec=1
    dans l'instruction read ?

    Merci pour ta réponse

    Zoro

  6. #6
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par zoro_le_renard
    j'ai juste besoin d'une précision, que veut dire le
    rec=1 dans l'instruction read ?
    rec sert a preciser le numero de l'enregistrement (record) dans le fichier binaire. read() peut determiner la position du debut de l'enregistrement car on a donne la longueur d'un enregistrement a open() en utilisant recl (record length). Le debut d'un enregistrement est donc au (rec - 1) * recl octet (mais read() fait ce calcul toute seule).

    Dans le post ci-dessus, je propose deux solutions qui font la meme chose:
    - lire toute la grille d'un coup. recl vaut alors 5000 (2500 enregristrements de 2 octets) et on se positionne au premier enregistrement (rec=1).
    - lire enregistrement par enregistrement. recl vaut alors 2 (1 enregistrement de 2 octets) et on se positionne au debut de l'enregistrement nrec (rec=nrec).

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut Outils pour lire un fichier binaire
    Bonjour à tous,
    Excusez moi, mais j'ai besoin de votre aide.
    Y a -t- il un outil qui permette de transformer un fichier binaire en ascii.
    En d'autres termes j'ai un fichier binaire et je veux transformer tout son contenu en ASCII.

    Merci infiniment!

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par maestro1303
    Y a -t- il un outil qui permette de transformer un fichier binaire en ascii. En d'autres termes j'ai un fichier binaire et je veux transformer tout son contenu en ASCII.
    Il n'y a pas d'outil generique, car un fichier binaire n'est pas en general "self describing". Donc on ne sait pas comment le lire. Si tu connais le format de ton fichier, tu peux ecrire un programme qui fasse le dump vers un format texte. Sinon, le createur du fichier doit fournir l'outil adequat.

  9. #9
    Membre régulier
    Inscrit en
    Juillet 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Juillet 2006
    Messages : 232
    Points : 79
    Points
    79
    Par défaut
    Merci infiniment de cette réponse très instructive.

    Au fait je travaille dans les télecoms et je suis parfois confronté à des gens pour des litiges sur les communications téléphoniques, et j'ai bien peur cette fois-ci que mes interlocuteurs aillent jusqu'à me balancent leurs fichiers binaires(à la sortie de leur switch) pour analyse. Surtout quand ils savent que je n'ai pas d'outils pour ça!

    J'ai même entendu l'un d'eux dire: "ouais, il faut donner les fichiers binaires à la sortie des machines, avant qu'il n' y ait eu la moindre intervention humaine".

    Je pense qu'ils veulent me bourrer, mais là s'il m'envoient je vais leur dire qu'il m'e,nvoient également l'outil de transform qui va avec!



    Merci infiniment

    PS: Je voouidrais en savoir davanratage sur ces techniques.

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

Discussions similaires

  1. lecture fichier binaire de double
    Par sandra771 dans le forum C
    Réponses: 6
    Dernier message: 10/11/2006, 16h42
  2. Lecture fichier binaire
    Par djidji dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2006, 11h58
  3. Réponses: 5
    Dernier message: 02/10/2006, 22h54
  4. Lecture fichier binaire
    Par kek_net dans le forum Langage
    Réponses: 5
    Dernier message: 07/08/2006, 19h37
  5. Lecture fichier binaire
    Par gabule dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/05/2006, 15h53

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