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] print %d


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut [langage] print %d
    Salut

    Encore un question de newbie.
    voila je voudrai ecrire un script en perl:
    Caractere:1
    Valeur:2
    Si je rentrte 1
    il me dit:
    caractere: <stdin>
    return valeur_ascii

    si je rentre 2
    il me dit
    valeur: <stdin>
    return code_ascii

    Cest a dire un script qui me donne soit le code ascii soit le caractere

    G commencer mais je suis bloker qu print jarrive pas a le faire marcher
    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
     
    $choix=3;
    while( $choix!=1 and $choix!=2)
    {
    print "Caractere:1\n";
    print "Valeur:2\n";
    $choix=<STDIN>;
    chop $choix;
    }
    $inter="p";
    if($choix==1)
    {
            while(!($inter eq "q"))
            {
                    $inter=<STDIN>;
                    chop $inter;
                    printf("valeur %d\n",int($inter)); #probleme
            }
    }
    else
    {
            while($inter!=113) # valeur de 'q'
            {
                    $inter=<STDIN>;
                    chop $inter;
                    print "caractere %c \n",$inter;    # probleme
            }
    }
    Merci
    Si cest pas clair dites le moi et je preciserai

  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
    D'abord, les fonctions que tu utilises sont incorrectes, pour obtenir le code ASCII d'un caractère il faut utiliser la fonction ord CARACTERE , et pour obtenir un caractère à partir de son code ASCII, il faut utiliser chr NOMBRE.

    Voilà plutôt le code que je te conseillerais :
    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
     
    $choix=3; 
    while( $choix != 1 and $choix != 2) 
    { 
    print "Caractère -> code ASCII: 1\n"; 
    print "Code ASCII -> caractère: 2\n";
    print "?\n"; 
    $choix=<STDIN>; 
    chomp $choix; 
    } 
     
    $inter="p";
    print "tapez 'q' pour quitter\n"
     
    if($choix==1) 
    { 
            for(;;)
            { 
                    $inter=<STDIN>; 
                    $inter = substr $inter, 0, 1; 
                    print "code ascii de $inter : " . ord($inter) . "\n";
                    last if ($inter eq 'q');
            } 
    } 
    else 
    { 
            for(;;)
            { 
                    $inter=<STDIN>; 
                    chomp $inter;
                    last if ($inter eq 'q'); 
                    print "caractère correspondant à $inter : " . chr($inter) . "\n"; 
            } 
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Par défaut
    code corrige :
    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
     
    #!/usr/bin/perl
     
    $choix=3; 
    while( $choix!=1 and $choix!=2) 
    { 
    	print "Caractere:1\n"; 
    	print "Valeur:2\n"; 
    	$choix=<STDIN>; 
    	chop $choix; 
    } 
    $inter="p"; 
    if($choix==1) 
    { 
         while(!($inter eq "q")) 
         { 
                 $inter=<STDIN>; 
                 chop $inter; 
                 print "valeur " . ord($inter) . "\n"; # pas de probleme 
         } 
    } 
    else 
    { 
         while($inter!=113) # valeur de 'q' 
         { 
                 $inter=<STDIN>; 
                 chop $inter; 
                 print "caractere " . chr($inter) . "\n";    # pas de probleme 
         } 
    }

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Merci

    Ca marche
    Je suis trop fort 8)

    Pardon vous etes trop fort


    Enfin serieusement ya autre chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "caractere "  ,   chr($inter)  ,   "\n";
    Il fo mettre des point ou des virgules parce ke ca marche avec les deux et moi je mettai tjs des virgule?
    Ou ya une norme?

    Eet pourkoi Jedai tu as mis
    for( ; ; )
    et pas
    while(1)

    Je vois comment tu sors ded la boucle mais je comprend pas linteret du for au lieu du While?
    Cest un choix? ou une obligation ou norme?

  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
    Bah le for( ; ; ) c'est une tradition qui nous vient du C, et je suppose que tu vois pourquoi j'ai fait ça plutôt que ta solution initiale ?

    En fait pour les points et les virgules, tu te pose cette question parce que tu es dans un print : la syntaxe du print est celle ci :
    print HANDLE_FICHIER LISTE; (tu noteras l'espace entre le 'fichier' où l'on écrit, par défaut STDOUT, et la liste de valeur affichée).
    la LISTE est composées de valeur scalaires qui sont affichées à la suite les unes des autres.

    Rien à voir donc avec le point '.' qui est l'opérateur de concaténation (mise bout à bout) de deux chaînes en perl. Valà, tu peux utiliser le point partout mais la virgule ne marchera qu'avec print.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    OK merci pour linfo

    Par contre non je vois pas pourkoi for(; ; ; ) desole

    La je pense ke cest plus simple car tu fait le test apres mais sinon je vois vraiment pas pourkoi

  7. #7
    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
    Bon en fait for( ; ; ) n'est pas mieux que while(1), c'est juste une tradition.

    Si j'ai fait une boucle infinie c'est parce que logiquement pas grand monde ne sait que 113 c'est le code de 'q' (et ici tu n'es pas en C : il n'y a pas de type 'char', quand tu fait 'q' == 113, 'q' est d'abord transformé en 0 avant d'être comparé à 113), donc il aurait été difficile de quitter le choix 2... Mais la principale raison pour la boucle infinie c'est qu'elle autorise plus de liberté pour le placement des conditions d'interruption, ainsi j'ai placé celle-ci au milieu de la boucle pour le choix 2, ce qui m'évite que le script essaie de faire chr( 'q' ) soit chr(0), c'est à dire un caractère de contrôle je pense (je sais plus lequel), déjà que ça m'ennuie qu'il n'y ait pas de sécurité pour éviter que l'utilisateur rentre un nombre inférieur à 30 (caractère de contrôle pour la plupart ou fin de ligne, retour chariot, tabulation...). Enfin voilà quoi.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Merci

    Ji aV pas penser mais cest vrai ke cest plus simple comme ca

Discussions similaires

  1. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37
  5. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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