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 :

Cassure d'une chaîne


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut Cassure d'une chaîne
    Bonjour à tous,

    J'expose mon problème avec un script qui créé à distance des comptes sur un parc de machine unix :

    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
    my @array_user = split(/#/, $user);
    my $user_login = $array_user[0];
    my $user_iud = $array_user[1];
    my $user_gid = $array_user[2];
     
    my $cmd1 = "/usr/sbin/useradd -u $user_iud -g $user_gid -d /u/$user_login -s /usr/bin/ksh -m $user_login";
    my $cmd2 = "/usr/sam/lbin/usermod.sam -p $H_pass $user_login";
     
     
    my $connexion = new Net::Telnet (Prompt => '/[%#>] $/', Timeout => 10, Errmode=>'return') or die "Can't connect:$!";
    $connexion->open($hostname);
    $connexion->login($U_login, $U_pass);
     
    $connexion->cmd("su\n");
    $connexion->waitfor('/password: ?$/i') or die "no old password prompt: ", $connexion->lastline;
    $connexion->print("$P_pass\n");
     
    print("$cmd1\n");
    print("$cmd2\n");
    $connexion->print("$cmd1\n");
    J'affiche donc mes commande avant l'exécution (mod debug). Et là ça coince.
    Voilà le résultat :

    /usr/sbin/useradd -u 1000 -g 2
    -d /u/<login> -s /usr/bin/ksh -m <login>
    /usr/sam/lbin/usermod.sam -p <pass> <login>
    D'où vient cette "cassure" ?

    Merci d'avance pour vos lumières.

  2. #2
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut apparemment
    apparemment ta cassure vien de la variable : $user_gid.
    cette variable semble contenir un caractère de fin de ligne (\n) ou bien de retour chariot (\r).
    vérifie au moment ou tu mémorise la variable que tu fait bien un chomp() et n'oublie pas que si tu est sur windows il faut aussi faire un petit s/\r//
    CKL
    N°°b forever
    --
    may the be with you

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut
    Le chomp avale mes variables.. en fait elles affichent 0.

    Je n'ai pas de \n ou de \r dans mon code mais au vue de tes remarques j'ai tout vérifiées. Mes variables viennent d'une chaîne de caractère présente dans un fichier puis spliter.
    En y regardant de plus prêt, $user_gid est le dernier élément. Le retour à la ligne provenait du fichier .txt

    Il me reste à supprimer au moment ou je définie ma variable mais ça c'est un autre problème.

    Merci beaucoup CKLN00 pour ton aide !

  4. #4
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    Citation Envoyé par cassis2k Voir le message
    Il me reste à supprimer au moment ou je définie ma variable mais ça c'est un autre problème.
    bha non c'est pas un autre problème justement
    il te suffit au moment ou tu lis le fichier de faire un chomp() et ne stock pas le résultat du chomp() car c'est soit 1 soit 0
    (chomp modifie la variable reçu en paramètre, si on précise pas la variable c'est $_ qui est utilisé, et retourne 1 ou 0 si il a effectivement supprimer le charactère fin de ligne)
    au moment ou tu lis le fichier .txt tu doit avoir qqch de se gout la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while <FileHandl>
    {
      ...
    }
    rajoute au tout début du bloc while un petit chomp() ;
    qui auras pour effet de supprimer le caractère fin de ligne de la variable $_ (qui à ce moment la contiens la ligne en cours de lecture).
    Si le fichier à été crée par windows et utiliser telle quelle par le programme il te faut aussi rajouter un petit s/\r// qui supprimeras le carctère \r que windows met en plus du caractère \n à la fin de toute ces lignes.
    Comme tu me dit que tes variable après chomp devenais 0 je suppose que c'est effectivement le cas chez toi.

    donc tu devrais finalement avoir qqch comme ça à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while <FileHandl>
    {
      s/\r//; chomp ;
      ...
    }
    CKL
    N°°b forever
    --
    may the be with you

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 106
    Points : 87
    Points
    87
    Par défaut
    Merci beaucoup pour cette explication. J'applique ça tout de suite

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 3
    Dernier message: 28/09/2003, 10h46
  3. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  4. Comptage de mots dans une chaîne
    Par kikinou dans le forum Pascal
    Réponses: 10
    Dernier message: 01/01/2003, 02h27
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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