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 :

perl / tableau je penses ?


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut perl / tableau je penses ?
    Bonjour a tous, bon je commence par m'excuser parceque j'ai pas trouvé l'info sur le forum bien que je suis sur qu'elle y soit.

    Bref je commence tout juste en perl et j'avous que ce language est vraiment formidable.

    Donc voila je me suis donné la lourde tache de migrer tout les scripts de mon entreprise qui etaient en ksh / csh / sh en perl.

    J'ai donc commencé par le plus simble mais je bloque déjà; je m'explique :

    J'ai un fichier texte formater comme ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    user::group::rep
    user1::groupe1::rep1
    ....
    usern::groupen::repn
    Je dois donc traiter ce fichier et forcer des permissions en fonction de ce fichier.

    Donc j'ai fait ca mais biensur ca ne marche pas :

    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
     
    #/usr/bin/perl
     
     
    # Ouverture du fichier list-fix-rep.txt
    open LISTE, "</nas/install/blablabla/liste"
         or die "Erreur lors de la lecture du fichier : ($!)";
    while (<LISTE>) {
    @GRP = ??
    }
     
    #La fonction defined vérifie que la valeur de retour n'est pas undef,
    #valeur qui est renvoyé si l'user ou le groupe demandé n'existe pas
    #la fonction chown doit etre obligatoirement utilisé avec l'uid, pour contourner
    #le pb on utilise les fcts getpwnam et getgrnam qui retourn l'uid/gid
    defined (my $utilisateur = getpwnam "redac")
             or die "l utilisateur n existe pas";
    defined (my $groupe = getgrnam "a0xao021")
             or die "le groupe specifie n existe pas";
     
    chmod 0755, @LISTE_REP;
     
    print 'system "chgrp -R $groupe @LISTE_REP"\n';
     
    close LISTE;
    bref en fait je bloque par par l'ecriture du code (bienque ...) mais surtout par la logique.

    Si quelqu'un aurait l'amabilité de m'aider dje lui en serait reconnaisent

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bon j'essais de faire avencer mon pb mais si qq1 pouvait m'aider ca seait vraiment sympa,
    Donc voila mon script modifié :
    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
     
    #/usr/bin/perl
     
     
    # Ouverture du fichier list-fix-rep.txt
    @TAB = open LISTE, "<e:/test/liste.txt"
         or die "Erreur lors de la lecture du fichier : ($!)";
    while (<@TAB>) {
    @LISTE_ALL = split /:/,@TAB;
    print "Donnees du tableau \@LISTE_ALL : $LISTE_ALL\n";
    @USER = @LISTE_ALL[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51];
    print "Donnees du tableau \@USER : $USER\n";
    @GRP = @LISTE_ALL[1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52];
    print "Donnees du tableau \@GRP : $GRP\n";
    @REP = @LISTE_ALL[2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53];
    print "Donnees du tableau \@REP : $REP\n";
    }
     
    foreach (@LISTE_aLL) {
    #La fonction defined vérifie que la valeur de retour n'est pas undef,
    #valeur qui est renvoyé si l'user ou le groupe demandé n'existe pas
    #la fonction chown doit etre obligatoirement utilisé avec l'uid, pour contourner
    #le pb on utilise les fcts getpwnam et getgrnam qui retourn l'uid/gid
    defined (my $utilisateur = getpwnam @USER)
             or die "l utilisateur n existe pas";
    defined (my $groupe = getgrnam @GRP)
             or die "le groupe specifie n existe pas";
     
    print 'system "chmod 0755, @REP"\n';
     
    print 'system "chgrp -R $groupe @REP"\n';
    }
    close LISTE;
    qui me donne rien en sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    C:\Documents and Settings\user\Bureau>
    perl perm-projet_em.pl
    Donnees du tableau @LISTE_ALL :
    Donnees du tableau @USER :
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
     
    C:\Documents and Settings\user\Bureau>

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Bonjour,

    en mettant la pragma strict dans ton script (use strict, tu t'appercevrais je pense de ce qui cloche...

    Compare ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Donnees du tableau \@LISTE_ALL : $LISTE_ALL\n";
    avec le mien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Donnees du tableau \@LISTE_ALL : @LISTE_ALL\n";

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bah j'ai le droit a ce fabuleux message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Global symbol "@TAB" requires explicit package name at C:\DOCUME~1\user\Bur
    u\FIX-PE~1.PL line 7.
    Global symbol "@TAB" requires explicit package name at C:\DOCUME~1\user\Bur
    u\FIX-PE~1.PL line 9.
    BEGIN not safe after errors--compilation aborted at C:\DOCUME~1\user\Bureau
    IX-PE~1.PL line 9.
    Je comprends pas trop a vrai dire, j'ai remplacé la ligne que tu m'as indiqué et j'ai mis des my devant mes tableaux mais ca ne fonctionne toujours pas ..

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    ah ou j'ai aussi corrigé une faute d'othographe foreach (@LISTE_aLL) en foreach (@LISTE_ALL)

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    J'ai corrigé le début de ton programme :

    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
     
    #/usr/bin/perl
     
    use strict;
     
    my @TAB;
    my @LISTE_ALL;
    my @USER;
    my @GRP;
    my @REP;
     
    # Ouverture du fichier list-fix-rep.txt
    @TAB = open LISTE, "<e:/test/liste.txt"
         or die "Erreur lors de la lecture du fichier : ($!)";
    while (<@TAB>) {
        @LISTE_ALL = split /:/,@TAB;
        print "Donnees du tableau \@LISTE_ALL : @LISTE_ALL\n";
        @USER = @LISTE_ALL[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51];
        print "Donnees du tableau \@USER : @USER\n";
        @GRP = @LISTE_ALL[1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52];
        print "Donnees du tableau \@GRP : @GRP\n";
        @REP = @LISTE_ALL[2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53];
        print "Donnees du tableau \@REP : @REP\n";
    }
    Ca donne quelque chose ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Donc mon fichier ressemble a ceci :
    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
    35
    36
    37
    38
    39
    40
    41
    42
     
    #/usr/bin/perl
     
    use strict;
     
    my @TAB;
    my @LISTE_ALL;
    my @USER;
    my @GRP;
    my @REP;
     
    # Ouverture du fichier list-fix-rep.txt
     
    @TAB = open LISTE, "<e:/test/liste.txt"
         or die "Erreur lors de la lecture du fichier : ($!)";
    print "Donnees de \@TAB = @TAB\n";
    while (<@TAB>) {
    @LISTE_ALL = split /:/,@TAB;
    print "Donnees du tableau \@LISTE_ALL : @LISTE_ALL\n";
    @USER = @LISTE_ALL[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51];
    print "Donnees du tableau \@USER : @USER\n";
    @GRP = @LISTE_ALL[1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52];
    print "Donnees du tableau \@GRP : @GRP\n";
    @REP = @LISTE_ALL[2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53];
    print "Donnees du tableau \@REP : @REP\n";
    }
     
    foreach (@LISTE_ALL) {
    #La fonction defined vérifie que la valeur de retour n'est pas undef,
    #valeur qui est renvoyé si l'user ou le groupe demandé n'existe pas
    #la fonction chown doit etre obligatoirement utilisé avec l'uid, pour contourner
    #le pb on utilise les fcts getpwnam et getgrnam qui retourn l'uid/gid
    defined (my $utilisateur = getpwnam @USER)
             or die "l utilisateur n existe pas";
    defined (my $groupe = getgrnam @GRP)
             or die "le groupe specifie n existe pas";
     
    print 'system "chmod 0755, @REP"\n';
     
    print 'system "chgrp -R $groupe @REP"\n';
    }
    close LISTE;
    et j'ai ca en retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    C:\Documents and Settings\user>"C:\Documents and Settings\user\Bureau\fix-
    perm-projet_em.pl"
    Donnees de @TAB = 1
    Donnees du tableau @LISTE_ALL : 1
    Donnees du tableau @USER : 1
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
    The getpwnam function is unimplemented at C:\DOCUME~1\user\Bureau\FIX-PE~1.PL
     line 32.
     
    C:\Documents and Settings\user\Bureau>
    ah oui et mon fichier lu ressemble a ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    toto:grptoto:/nas/toto/user/toto
    toto1:grptoto1:/nas/toto/user/toto1
    toto2:grptoto2:/nas/toto/user/toto2
    toto3:grptoto3:/nas/toto/user/toto3
    toto4:grptoto4:/nas/toto/user/toto4
    toto5:grptoto:/nas/toto/user/toto5
    c'est affreux je seche, plus ca avance et plus j'ai l'impression de reculer

    Ah oui au fait merci pour ton aide c'est vraiment gentil de ta part.

  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
    Apparemment, la fonction getpwnam n'est pas écrite dans ce code source. Il faudrait la rajouter.

    @++
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    ok pour la fonction getpwnam mais il me semblait que c'etait une fonction interne en perl ??

    Sinon quelqu'un peut me dire pourquoi j'obtiens 1 dans mes tableaux et pas le resultat du genre :

    @LISTE_ALL =
    toto:grptoto:/nas/toto/user/toto
    toto1:grptoto1:/nas/toto/user/toto1
    toto2:grptoto2:/nas/toto/user/toto2
    toto3:grptoto3:/nas/toto/user/toto3
    toto4:grptoto4:/nas/toto/user/toto4
    toto5:grptoto:/nas/toto/user/toto5

    En tout cas merci pour vos précieuses aides.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    bon j'ai continué mon investigation et j'ai changé le code comme ceci :
    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
    35
    36
    37
    38
    39
    40
     
    #/usr/bin/perl
     
    use strict;
     
    my $LISTE;
    my @LISTE_ALL;
    my @USER;
    my @GRP;
    my @REP;
     
    # Ouverture du fichier list-fix-rep.txt
     
    open $LISTE, "<e:/test/liste.txt"
         or die "Erreur lors de la lecture du fichier : ($!)";
    while (<$LISTE>) {
    @LISTE_ALL = split /:/,$LISTE;
    print "Donnees du tableau \@LISTE_ALL : @LISTE_ALL\n";
    @USER = @LISTE_ALL[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51];
    print "Donnees du tableau \@USER : @USER\n";
    @GRP = @LISTE_ALL[1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52];
    print "Donnees du tableau \@GRP : @GRP\n";
    @REP = @LISTE_ALL[2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53];
    print "Donnees du tableau \@REP : @REP\n";
    }
     
    foreach (@LISTE_ALL) {
    #La fonction defined vérifie que la valeur de retour n'est pas undef,
    #valeur qui est renvoyé si l'user ou le groupe demandé n'existe pas
    #la fonction chown doit etre obligatoirement utilisé avec l'uid, pour contourner
    #le pb on utilise les fcts getpwnam et getgrnam qui retourn l'uid/gid
    #defined (my $utilisateur = getpwnam @USER)
    #         or die "l utilisateur n existe pas";
    #defined (my $groupe = getgrnam @GRP)
    #         or die "le groupe specifie n existe pas";
    print "system chmod 0755, @REP\n";
     
    print "system chgrp -R @GRP @REP\n";
    }
    close LISTE;
    et voici le resultat :

    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
     
    C:\Documents and Settings\user>"C:\Documents and Settings\u
    perm-projet_em.pl"
    Donnees du tableau @LISTE_ALL : GLOB(0x15d5058)
    Donnees du tableau @USER : GLOB(0x15d5058)
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
    Donnees du tableau @LISTE_ALL : GLOB(0x15d5058)
    Donnees du tableau @USER : GLOB(0x15d5058)
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
    Donnees du tableau @LISTE_ALL : GLOB(0x15d5058)
    Donnees du tableau @USER : GLOB(0x15d5058)
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
    Donnees du tableau @LISTE_ALL : GLOB(0x15d5058)
    Donnees du tableau @USER : GLOB(0x15d5058)
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
    Donnees du tableau @LISTE_ALL : GLOB(0x15d5058)
    Donnees du tableau @USER : GLOB(0x15d5058)
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
    Donnees du tableau @LISTE_ALL : GLOB(0x15d5058)
    Donnees du tableau @USER : GLOB(0x15d5058)
    Donnees du tableau @GRP :
    Donnees du tableau @REP :
    system chmod 0755,
    system chgrp -R
     
    C:\Documents and Settings\user>
    qui biensur ne me donne toujours pas le resultat attendu !!

    A l'aide ....

  11. #11
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Normal que ça ne marche pas....
    Tu split le pointeur de ton fichier !!! $LISTE

    Vu que tu utilises les variables anonyme, tu devrais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    while (<$LISTE>) {
    @LISTE_ALL = split /:/,$_; 
    ...
    Ou alors ce qui est beaucoup plus propre, tu déclares une variable qui contiendra chaque ligne de ton fichier $LISTE, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    my $sLigne;
    ...
    while ($sLigne = <$LISTE>) {
    @LISTE_ALL = split /:/,$sLigne; 
    ...
    Jérôme
    Jérôme

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bien merci jejeman,

    J'ai modifié mon script en fonction de tes conseils :
    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
     
    #/usr/bin/perl
     
    use strict;
     
    my $LISTE;
    my @LISTE_ALL;
    my @USER;
    my @GRP;
    my @REP;
     
    # Ouverture du fichier list-fix-rep.txt
     
    open LISTE, ( "<e:\\test\\liste.txt" )
         or die "Erreur lors de la lecture du fichier : ($!)";
    while (<LISTE>) {
    @LISTE_ALL = split /:/,$_;
    #print "Donnees du tableau \@LISTE_ALL : @LISTE_ALL\n";
    @USER = @LISTE_ALL[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51];
    #print "Donnees du tableau \@USER : @USER\n";
    @GRP = @LISTE_ALL[1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52];
    #print "Donnees du tableau \@GRP : @GRP\n";
    @REP = @LISTE_ALL[2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53];
    #print "Donnees du tableau \@REP : @REP\n";
    print "system chmod 0755 @REP\n";
    print "system chgrp -R @GRP @REP\n";
    }
     
    close LISTE;
    ca fonctionne presque, c'est a dire que je voudrai supprimer ces espaces/tabulations entre le groupe et le repertoire; j'ai fait des chomp mes ca marche pas :
    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
     
    C:\Documents and Settings\user>"C:\Documents and Settings\user\Bureau\fix-
    perm-projet_em.pl"
    system chmod 0755 /nas/toto/user/toto
     
    system chgrp -R grptoto                  /nas/toto/user/toto
    system chmod 0755 /nas/toto/user/toto1
     
    system chgrp -R grptoto1                  /nas/toto/user/toto1
    system chmod 0755 /nas/toto/user/toto2
     
    system chgrp -R grptoto2                  /nas/toto/user/toto2
    system chmod 0755 /nas/toto/user/toto3
     
    system chgrp -R grptoto3                  /nas/toto/user/toto3
    system chmod 0755 /nas/toto/user/toto4
     
    system chgrp -R grptoto4                  /nas/toto/user/toto4
    system chmod 0755 /nas/toto/user/toto5
     
    system chgrp -R grptoto5                  /nas/toto/user/toto5
     
    C:\Documents and Settings\user>
    Ah oui une derniere question, quelqu'1 sait comment je pourrai parcourir ce tableau sans avoir a nommer explicitement les elements, un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @GRP = for ($i=0 ; $i =$#LISTE_ALL;@LISTE_ALL[$i+=2]);

    En tout cas merci a tous !! Ce forum est vraiment super réactif c'est vraiment tres agréable.

    Vivement que je devienne fort en perl afin que je puisse aider les autres autant que vous l'avez fait pour moi.

  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
    si tu veux parcourir @GRP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach @GRP {
    print $_."\n";
    }

  14. #14
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Bon je me suis penché sur ton code, et j'y vois plusieurs pb.....
    Tout d'abord, comment tu fais si tu as plus de 53 lignes dans ton fichier texte ?
    De plus, les façons de lire les infos et de les ré-écrire ensuite ne sont pas très élégantes....

    En ce qui concerne les tabulations, en fait ce n'en sont pas, mais tes tableaux REP, GRP et USER sont très mal formés.

    Je te propose une version un peu différente et qui peut certainement encore être améliorée...
    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
     
    #/usr/bin/perl
     
    use strict;
     
    my $LISTE;
    my @LISTE_ALL;
    my @tTabCommande;
     
    # Ouverture du fichier list-fix-rep.txt
    open $LISTE, "toto.txt"
         or die "Erreur lors de la lecture du fichier : ($!)";
     
    while (<$LISTE>) {
       # on efface le tableau au cas ou
       undef(@LISTE_ALL);
       # on récupère les 3 valeurs dans un tableau
       @LISTE_ALL = split /:/,$_;
       # on écrit directement la commande system dans une chaine
       # dans la foulée, on stocke toutes ces chaines dans un tableau
       push(@tTabCommande, "system chmod 0755, $LISTE_ALL[0]\nsystem chgrp -R $LISTE_ALL[1] $LISTE_ALL[2]\n");
    }
    close LISTE; 
     
    # on affiche les commandes system
    map{print $_} @tTabCommande;
    J'espère que ça pourra t'aider....

    Jérôme
    Jérôme

  15. #15
    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
    un conseil rajoute -w à ton shebang c'est à dire
    et rajoute aprés use strict;
    C'est mieux pour les messages d'erreurs

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bon bah merci j'ai que ca a dire ca fonctionne sans pb et c'est exactement ce que je voulais faire !

    Le seul truc maintenant qu'il me reste a faire c'est de comprendre le ton code car je dois bien avoué que je suis un peu largué ...


    En tout cas un GRAND MERCI pour votre aide !!

    C'est tres rare de trouver un forum aussi réactif en en plus en francais !!




    MERCI !!!

  17. #17
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 546
    Points : 219
    Points
    219
    Par défaut
    Si tu as des questions, n'hésite pas !

    Jérôme
    Jérôme

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    bah maintenant que tu en parles ... tu pourrais si tu as le temps et si tu as envi m'expliquer un peu plus le fonctionnement de ce srcipt ?

    Si tu n'as pas le temps je comprendrais.


    Dans tout les cas merci pour tout.

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Ah oui une derniere ( ca fait 5 fois je fais le coup ) question, ce script m'affiche les commandes mais les executes pas, vu que je connais pas la fonction map, comment je fais pour qu'il s'execute ?

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

Discussions similaires

  1. Merge d'un tableau perl ?
    Par rdams dans le forum Langage
    Réponses: 1
    Dernier message: 12/12/2005, 16h30
  2. [Perl] Prob avec reclasssement d un tableau
    Par needles94000 dans le forum Langage
    Réponses: 6
    Dernier message: 17/10/2005, 16h45
  3. [PERL] problème tri de tableau
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2005, 15h42
  4. [perl]Problème tableau indexé
    Par LE NEINDRE dans le forum Langage
    Réponses: 8
    Dernier message: 25/08/2005, 21h24
  5. tableau en PERL
    Par marinette dans le forum Langage
    Réponses: 16
    Dernier message: 04/07/2005, 16h17

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