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 :

Ecrire en fichier binaire


Sujet :

Langage Perl

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Par défaut Ecrire en fichier binaire
    Bonjour à tous,

    Je souhaiterais écrire un "VRAIE" fichier binaire. C'est à dire que si j'écris un "1" ou un "0", perl ne me les code pas en ASCII.

    Pour le moment j'utilise ceci pour créer mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open (COMPRESSE, '>', "result.bin") or die("erreur fichier\n");
    binmode COMPRESSE;
    et j'écris dedans comme ceci :
    Malheureusement quand je regarde dans les propriétés du fichier créée, il y a tout qui est codé en ASCII donc un "1" ou un "0" prend un octet...

    Savez-vous s'il est possible de faire cela?

    Merci beaucoup

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Au lieu d'utiliser binmode(), tu peux ouvrir directement le fichier en mode binaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open my($compact_file), '>:raw', "result.bin"
      or die "erreur fichier : $!\n";
    Par ailleurs on ne peux pas écrire un simple bit vers un fichier sur le disque, il faut écrire un octet entier (aucun lien avec Perl, c'est un problème de matériel). C'est pourquoi il va te falloir maintenir un tampon qui s'abstiendra d'écrire tant qu'il n'a pas un octet entier à écrire, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package BinaryWriter;
    use strict; use Carp;
     
    use base 'Exporter';
    our @EXPORT = qw(start_binary_writing);
     
    sub start_binary_writing {
      my $file = shift;
      my @buffer = ();
      my $count = 0;
      my $finished = 0;
     
      my $writer = sub {
        carp "This file has been finalized, you can't write on it anymore.\n"
          if $finished;
        $count += @_;
        push @buffer, @_;
        while( $count >= 8 ) {
          my @octet = splice @buffer, 0, 8;
          $count -= 8;
          print {$file} (pack 'B8', (join '', @octet));
        }
      };
     
      my $finish = sub {
        print {$file} (pack 'B*', (join '', @buffer));
        $finished = 1;
      };
     
      return ($writer, $finish);
    }
     
    1;
    __DATA__
    Puis tu utilises ce module comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/usr/bin/env perl
    use strict; use warnings;
     
    use BinaryWriter;
     
    open my($compact_file), '>:raw', "result.bin"
      or die "erreur fichier : $!\n";
     
    my ($w, $f) = start_binary_writing $compact_file;
     
    $w->(0,1,1,0,0,0,0,1);
     
    $w->(0,1,1,0,0,0,1);
     
    $f->();
     
    close $compact_file;
     
    __END__
    (si tu écrit déjà tes "bits" par groupe de multiples de 8, tu peux juste utiliser pack directement)

    --
    Jedaï

    PS : Remarque qu'en fait il est extrêmement rare d'avoir besoin ou qu'il soit souhaitable d'écrire bit à bit, donc peut-être que si tu nous disais ce que tu essaies de faire, nous pourrions t'orienter vers une solution un peu moins sauvage...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Par défaut
    j'implémente l'algorithme de Huffman... Donc je dois réécrire un fichier texte en un fichier binaire...

    Merci pour ta réponse,

    je vais essayer

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 42
    Par défaut
    Et auriez-vous une idée pour pouvoir lire par la suite ce fichier binaire bit par bit?

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Faire le même genre de chose, dans l'autre sens. A toi de jouer, ce coup-ci.

    --
    Jedaï

Discussions similaires

  1. lire et ecrire un fichier binaire
    Par Ytech123 dans le forum Débuter
    Réponses: 14
    Dernier message: 07/08/2025, 15h59
  2. Ecrire un fichier binaire avec AS3
    Par f56bre dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 16/12/2008, 19h49
  3. Ecrire un fichier binaire
    Par tyarcaouen dans le forum C#
    Réponses: 2
    Dernier message: 18/10/2008, 19h17
  4. Ecrire un fichier binaire en C++
    Par anas.eh dans le forum C++
    Réponses: 2
    Dernier message: 03/09/2007, 15h32
  5. Ecrire un fichier binaire avec des caractères
    Par stokastik dans le forum C
    Réponses: 18
    Dernier message: 17/08/2006, 17h40

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