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 et texte


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut Fichier binaire et texte
    Bonjour

    Voila je lis un fichier qui contient à la fois du code ASCII et du binaire. Que
    j'extrais dans plusieurs fichiers.

    Je n'ai aucun problème pour faire ceci, le seul souci c'est que au moment ou je copie le binaire dans le nouveau fichier, bah c'est plus du binaire.

    Ce que je voudrais c'est qu'au moment ou perl arrive sur les lignes en binaire qu'il me garde la valeur d'origine et non le ASCII et me la copie dans mon fichier.

    J'ai essayer avec binmode mais sans aucun succès.

    voila

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Faudrait montrer ton script pour qu'on t'en dise plus...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut
    Voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    open F_LIRE2,"Fichier 1" or die "le fichier n'existe pas !\n";
    open F_ECRIRE,">fichiersortie" or die "Le fichier ne peut être édité !\n";

    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
     
    while(<F_LIRE2>)
    	{
    	 unless ($_ =~ m/^Date:/i)
    	{	
    		if ($_ =~ m/^Test:/s)				
    		{
    			if ($HT == 0)
    			{
    				$_ =~ s/^Test: (S+)//g;
    			}
    			$HT = $HT + 1;
    			#print F_ECRIRE ;
    		}
    		if ($HT == 1)
    		{
    			$_ =~ s/HTOK//g;	
    			if ($image == 1)
    			{
    		# C'est ici ou je voudrais trouvé le moyen de garder mon binaire	
    			print F_ECRIRE ;		
    			}
    			else
    			{
    			print F_ECRIRE ;
    			}
    		}
    		if ($HT >= 2)
    		{
    			$HT = 1;
    			TraceInfo();
    		}
    	}
    }
    $image est définie avant dans un autre sous-programme. Si $image est = 1 alors c'est du binaire.

    En ouvrant mon fichier directement en binaire, sa peut marcher ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Peut-être devrait tu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    open F_LIRE2,"Fichier 1" or die "le fichier n'existe pas !\n";
    open F_ECRIRE,">fichiersortie" or die "Le fichier ne peut être édité !\n";
    if ($image == 1) {
      binmode(F_ECRIRE);
    }
    Cela dit, j'ai peur que les données à écrire (si elle sont dans $_), ne soient déjà altérées (notamment par la modification $_ =~ s/HTOK//g et soit déjà elle-même au format texte...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut
    Code :

    open F_LIRE2,"Fichier 1" or die "le fichier n'existe pas !\n";
    open F_ECRIRE,">fichiersortie" or die "Le fichier ne peut être édité !\n";
    if ($image == 1) {
    binmode(F_ECRIRE);
    }

    Cela dit, j'ai peur que les données à écrire (si elle sont dans $_), ne soient déjà altérées (notamment par la modification $_ =~ s/HTOK//g et soit déjà elle-même au format texte...
    Je l'avais déjà essayer celui-là, du coup sa me pose un doute à savoir que dans mon fichier c'est du texte + du code source d'une image. Donc pour le texte aucun souci, mais pour l'image le doute reviens à savoir si c'est du binaire ou de l'hexa en code source ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Par défaut
    Donc pour information une image est bien en binaire.
    Bon j'ai trouver la solution.Je remet mon code avec le correctif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    open F_LIRE2,"Fichier 1" or die "le fichier n'existe pas !\n";
    open F_ECRIRE,">fichiersortie" or die "Le fichier ne peut être édité !\n";
    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
     
    while(<F_LIRE2>)
    	{
    	 unless ($_ =~ m/^Date:/i)
    	{	
    		if ($_ =~ m/^Test:/s)				
    		{
    			if ($HT == 0)
    			{
    				$_ =~ s/^Test: (S+)//g;
    			}
    			$HT = $HT + 1;
    			#print F_ECRIRE ;
    		}
    		if ($HT == 1)
    		{
    			$_ =~ s/HTOK//g;	
    			if ($image == 1)
    			{
                             print F_ECRIRE $buffer while
    				(read (F_LIRE2,$buffer,65536));			
    			}
    			else
    			{
    			print F_ECRIRE ;
    			}
    		}
    		if ($HT >= 2)
    		{
    			$HT = 1;
    			TraceInfo();
    		}
    	}
    }
    Il faut encore que j'améliore cette solution.

    Edit: La solution est bien mais je me retrouve bloquer car mes marqueurs ne sont plus compris.
    Ce que recherche maintenant c'est de pouvoir faire l'inverse.
    Y a t'il moyen de lire mon marqueur HTOK dans mon $buffer ?
    et l'inverse d'un binmode c'est quoi ?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/03/2007, 14h36
  2. Réponses: 21
    Dernier message: 15/12/2006, 15h54
  3. Détecter si un fichier est binaire ou texte?
    Par Chekov dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/10/2006, 08h13
  4. fichier binaire ou texte , que choisir ?
    Par Djob dans le forum C++
    Réponses: 4
    Dernier message: 19/12/2005, 16h21
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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