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 :

[langage] recuperer 8 caracteres dans un fichier


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [langage] recuperer 8 caracteres dans un fichier
    bonjour a tous,

    Je suis débutante en perl. J'ai bien compris comment recuperer une ligne entiere dans un fichier, mais je ne vois pas comment recuperer un nombre limiter de caracteres.

    Je m'explique: dans un fichier j'ai un grand nombre ecris en hexadecimal qui ressemble a ca:

    ae 45 ed 56 01 ce c6 b8 cc 05 f8 03 93 5c 67 4d
    db e0 d7 5c 4c 09 fd 79 51 fc 6b 0c ae c3 13 a8
    ...


    Ce nombre étant tres grand je voudrais le decouper en plusieur entiers a,b,c,... de 32 bits chacun.
    Il faudrait donc que j'arrive a avoir au final

    $a=0xae45ed56
    $b=0x01cec6b8
    $c=...


    Je ne sais pas si j'ai réussi a me faire comprendre mais si quelqu'un avait une petite idee pour y arriver je l'en remercie d'avance


  2. #2
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Tu peux t'inspirer de l'exemple ci-dessous pour ce que tu comptes faire (y a surement plus propre) :

    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
    # Pour exemple
    my $chaine = "ae 45 ed 56 01 ce c6 b8 cc 05 f8 03 93 5c 67 4d";
     
    # Supprime tous les espaces de la chaine
    $chaine =~ s/ //g;
     
    # Cree un espace tous les paquets de 8 caracteres non suivi par un espace
    1 while ($chaine =~ s/(\w{8})(\w)/$1 $2/);
     
    # Decoupe la chaine en groupes de 8 caractères + stockage dans un tableau
    my @hexa = split / /, $chaine;
     
    # Dans chaque ligne du tableau, il y a un paquet de 8 caracteres hexa
    foreach (@hexa) 
    {
    	print "Hexa = 0x$_\n";
    }
    N'hésite pas à demander s'il y a quelque chose que tu ne comprends pas.
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour ton aide mon programme n'a pas trop besoin d'etre propre c'est juste pour un traitement preleminaire.J'essai tout ca demain, merci encore.

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    heu...peut etre que j'ai pas lu assez de tutoriels mais c'est quoi le "1" placé devant le while.

    Sinon c'est à peu près ce dont j'avais besoin, il faut maintenant que je récupère dans le tableau non pas la chaine "ae 45 ed 56" mais la valeur de l'entier qui lui correspond. Mais je n'ai pas encore vraiment cherché comment faire alors je m'y met.

  5. #5
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par ifan
    heu...peut etre que j'ai pas lu assez de tutoriels mais c'est quoi le "1" placé devant le while.
    Pour que while boucle sur quelque chose.
    En gros, la ligne que j'ai mise signifie : "boucler jusqu'à ce qu'il n'y ait plus de transformation effectuée", le "1" ne sert que d'excuse au while().

    C'est comme si j'avais écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($chaine =~ s/(\w{8})(\w)/$1 $2/)
    {
       # Rien.
    }


    Citation Envoyé par ifan
    Sinon c'est à peu près ce dont j'avais besoin, il faut maintenant que je récupère dans le tableau non pas la chaine "ae 45 ed 56" mais la valeur de l'entier qui lui correspond. Mais je n'ai pas encore vraiment cherché comment faire alors je m'y met.
    Tu peux convertir chaque valeur du tableau en nombre avec hex().

    Exemple (si on reprend le code que je t'ai mis) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach (@hexa)
    {
       print "Conversion en int : " . hex($_);
       print "\n";
    }
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  6. #6
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, tu m'as fait gagner du temps (et j'en ai bien besoin).
    Je change de sujet mais saurais tu par hasard où je pourrais récuperer le module Digest::SHA1car apparamment quand j'utilise la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #use  Digest::SHA1 qw(sha1_hex )
    On me dit que Digest/SHA1.pm est introuvable, j'en conclu qu'il n'est pas présent par défaut.

    Edité par GLDavid, merci d'utiliser les balises codes plutôt que la couleur.

  7. #7
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Pour les modules, il faut aller voir sur CPAN ( http://www.cpan.org ), c'est le site qui les recense tous.

    Le site propose une recherche, je l'ai lancée pour trouver Digest::SHA1, et j'ai eu ceci en réponse :

    http://search.cpan.org/~gaas/Digest-SHA1-2.10/SHA1.pm


    Si tu n'arrives pas à l'installer, j'imagine que tu pourras trouver une aide dans la FAQ (j'avoue ne pas l'avoir encore lue )
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  8. #8
    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
    Citation Envoyé par Gamdwin
    Si tu n'arrives pas à l'installer, j'imagine que tu pourras trouver une aide dans la FAQ (j'avoue ne pas l'avoir encore lue )
    Oooooohhhhh, c'est pas bien ça !
    Pour répondre au problème de ifan, la soluce est ici (avec notre FAQ ).

    @++
    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.

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre aide

  10. #10
    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
    Une petite question ifan, la FAQ t'a t'elle bien renseignée ?

    @++
    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.

  11. #11
    Candidat au Club
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Oui la FAQ m'a bien renseignée en ce qui concerne l'installation d'un module. Par contre mon problème principal était de savoir où récupérer les modules et meme si dans un des exemples on peut voir où un des modules est récupéré je trouve que ca ne saute pas aux yeux(mais je n'ai pas lu toute la FAQ peut etre l'adresse est elle donnée ailleurs). Donc merci a Gamdwin pour m'avoir donner l'adresse du site.

    J'en profite pour poser une autre question :Est qu'il existe une fonction qui transforme les nombres décimaux en nombre hexadécimaux?

  12. #12
    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
    Citation Envoyé par ifan
    J'en profite pour poser une autre question :Est qu'il existe une fonction qui transforme les nombres décimaux en nombre hexadécimaux?
    tsss ... autre question, autre fil

    Mais la réponse est : oui


    A la base, déjà, tu as le "printf"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $a=100;
    my $b=65535;
    printf "%x %X\n", $a, $b;
    Après, il existe des outils plus complexes, notamment avec pack/unpack, mais c'est d'un niveau extrèmement relevé (pour tout dire, je n'ai pas encore réussi à triompher complètement dans mon combat contre ces outils).

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

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    adresse de la faq en page d'accueil forum perl et ma signature

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/09/2007, 15h11
  2. [langage] compter des caracteres dans une chaine
    Par louisis dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 22h39
  3. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  4. remplacer un caractere dans un fichier
    Par ickis dans le forum C
    Réponses: 11
    Dernier message: 13/10/2003, 09h29
  5. [langage] Créé un hash dans un fichier...
    Par Smooky dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2003, 08h49

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