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

Langage Perl Discussion :

[fichier binaire]lecture ecriture dump


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [fichier binaire]lecture ecriture dump
    Comment travailler avec un fichier binaire en perl

    Si j'écris dans un tel fichier les entiers courts 20 et 100

    son contenu en hexa doit être

    ou en big-endian
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Bonjour

    Je ne comprend pas tellement ton thread ou ta question. Que ccherches-tu précisément ? A lire un fichier un binaire ? A y récupérer des infos ?

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [fichier binaire]lecture ecriture dump
    Les deux

    Pour différentes raisons
    • 1- récupérer des fichiers binaires crées par d'autres programmes écrits ( en C ou en Java)

      2- créer à partir de perl des fichiers binaires qui pourront être utilisés par d'autres programmes écrits en C ou en java

      3- comprendre



    @++

  4. #4
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: [fichier binaire]lecture ecriture dump
    Citation Envoyé par parsy
    Comment travailler avec un fichier binaire en perl

    Si j'écris dans un tel fichier les entiers courts 20 et 100

    son contenu en hexa doit être

    ou en big-endian
    Merci de votre aide
    Pour traiter des fichiers en binaire, il suffit d'appeler binmode () avec le descripteur du fichier ... les opérations subséquentes travailleront sur un fichier binaire ... c'est à dire sans transformation de caractères spéciaux de fin de ligne et de fin de fichier.

    Maintenant, il ne faut pas oublier qu'en Perl, tout est chaînes de caractères ... y compris les données binaires.

    Ainsi, sortir la valeur numérique 20 dans un flux binaire sortira le caractère 2, puis le 0 ...

    Si ce que tu veux est le codage sous la forme d'un short-int, alors il faut au préalable passer par les fonctions pack () et unpack () qui font la conversion entre les différentes représentation des valeurs numériques/ascii.

    Bon courage
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [fichier binaire]lecture ecriture dump
    C'est vrai si on utilise print et printf dans 99% des cas

    C'est complètement faux si on utilise sysread et syswrite

    Je suis en train de faire des essais je vous tiendrai au courant de mes essais



  6. #6
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: [fichier binaire]lecture ecriture dump
    Citation Envoyé par parsy
    C'est vrai si on utilise print et printf dans 99% des cas

    C'est complètement faux si on utilise sysread et syswrite
    Tu n'avais pas précisé C'est vrai dans le cas général ... le plus souvent, on utilise les fonctions les plus simple et les mieux connues ( re )

    Ce qui est vrai, aussi, c'est que l'appel à binmode () devient superflu dans le cas de l'usage de sysread () et syswrite ().

    Par contre, ce que j'écris sur l'usage de pack/unpack reste vrai dans tous les cas.


    Bonne continuation.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [fichier binaire]lecture ecriture dump
    Voici la première partie de mes essais, les critiques et remarques ont les bienvenues:

    Sous WinHex j'ai créé le fichier data.bin suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Offset      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    ------------------------------------------------------------
     00000000    14 00 64 00                                      ..d.
    J'ai ensuite ecrit le code perl suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    use strict;
    use POSIX qw(:errno_h :fcntl_h);
    sysopen (F ,'data.bin',O_RDONLY) or die "$!";
    my $mot;
    my $numMot=0;
    while ( sysread (F, $mot,2) ){
    	print $numMot++.":".unpack('H4',$mot)."\n";
    }
    close F;
    unpack transforme le mot de deux octets sous forme d'une chaîne de 4 caractères donnant sa repésentation hexadécimale

    j'obtient:

    Il faut maintenant convertir les mots lus en entiers courts ( 2 octets ), pour cela on utilise toujours la fonction unpack: le paramètre 's' indique que le mot de deux octets est transformésous forme d'un entier(court) signé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    use strict;
    use POSIX qw(:errno_h :fcntl_h);
    sysopen (F ,'data.bin',O_RDONLY) or die "$!";
    my $mot;
    my @valeurs=();
    while ( sysread (F, $mot,2) ){
    	my $valeur=unpack('s',$mot);
    	push @valeurs,$valeur
    }
    close F;
    print "\@valeurs=@valeurs\n";

    Le résultat obtenu est :


  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut [fichier binaire]creation
    Je cherche maintenant à faire la manipulation inverse c'est à dire écrire le programme perl qui permet de créer le fichier binaire datBis.bin contenant les entiers courts ( 2 octets) 10,100 et 400

    Pour cela il faut transformer la valeur scalaire numérique représentée en interne sous forme d'un chaîne de caractères en un mot de 2 octets donnant sa valeur en binaire. Cette transformation est réalisée par la fonction pack avec le paramètre 's'

    Le programme suivant illustre cette transformation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use strict;
    my @valeurs=(10,100,400);
    my $numValeur=0;
    for my $valeur(@valeurs){
        my $mot=pack('s',$valeur);
        print $numValeur++.":avant pack:".unpack ('H*',$valeur).
             "\taprès pack:".unpack ('H4',$mot)."\n";
    }
    Les résultats obtenus sont

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0:avant pack:3130       après pack:0a00
    1:avant pack:313030     après pack:6400
    2:avant pack:343030     après pack:9001
    Il ne rest plus qu'à écrire les mot dans le fichier binaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    use strict;
    use POSIX qw(:errno_h :fcntl_h);
     
    sysopen (F ,'dataBis.bin',O_WRONLY|O_CREAT) or die "$!";
     
    my @valeurs=(10,100,400);
     
    for my $valeur(@valeurs){
        my $mot=pack('s',$valeur);
        syswrite(F,$mot,2);
    }
    close F;
    La visualisation du fichier datBis.bin sous WinHex est alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     Offset      0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
     ------------------------------------------------------------
     00000000    0A 00 64 00 90 01                                ..d...

Discussions similaires

  1. fichier binaire lecture avec ifstream
    Par debutant100 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2011, 19h43
  2. ouvrir un fichier en lecture/ecriture
    Par imsse dans le forum VBScript
    Réponses: 3
    Dernier message: 27/01/2010, 15h01
  3. Fichier en lecture / ecriture
    Par titan_33 dans le forum C#
    Réponses: 4
    Dernier message: 21/05/2007, 13h51
  4. Lecture ecriture dans un fichier binaire
    Par laetous dans le forum C
    Réponses: 13
    Dernier message: 26/08/2006, 08h50
  5. ouverture/lecture/ecriture dans un fichier en mode binaire
    Par dirty_boy dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2006, 08h38

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