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 :

comment executer ce script ?


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 39
    Points
    39
    Par défaut comment executer ce script ?
    Bonjour !
    J'ai un petit probleme, et je pense que vous devriez pouvoir m'aider ^-^

    J'ai écris un script qui me permet de modifier un fichier présent sur mon disque dur.
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #!/usr/bin/perl -pi
    use MIME::Base64;
    use warnings;
     
    # Initialisation du programme
    my $sn_exists; my $cn_exists;
    my $basedn; my $unknow_index;
    my $prefix;
    my $unknown_index;
     
    if(not defined $sn_exists){
      $sn_exists = 0;
      $cn_exists = 0;
      # Chemin de la base LDAP ou seront stockés les contacts
      $basedn=",ou=ditiric,ou=carnets,dc=entreprise,dc=fr";
      $unknown_index = 1;
    }
     
    	if($_ =~ /^sn:/){
    		$sn_exists = 1;
    	}
     
    	if($_ =~ /^cn:/){
    		$cn_exists = 1;
    	}
     
    	if($_ =~ /^$/){
    		if($sn_exists == 0){
    			print "sn: not given\n";
    		}
     
    		# Si l'attribut "cn" n'existe pas, on doit en créer un
    		# sinon LDAP va compléter le champ avec LDAP_NAMING_VIOLATION
     
    	if($cn_exists == 0){
    		print "cn: " . $cn . "\n";
    	}
     
    	$sn_exists = 0;
    	$cn_exists = 0;
    	}
     
    	# On décode les lignes encodée en BASE64 pour notre substitution
    	if($_ =~ /^(\w+):: (.*)/){
    		$_ = sprintf("%s: %s\n", $1, decode_base64($2));
    	}
     
    # On doit vérifier l'attribut "cn" de la ligne "dn" car certains contacts
    # n'ont pas d'attribut "mail=" définit, on doit donc ajouter notre champ
    # à la fin de la ligne
    if($_ =~ /^(dn:+\s*)/){
      $prefix = $1;
      $cn = $_;
     
      # On enlève le retour à la ligne
      chop $cn;
     
      # Extraction du champ cn de la ligne dn
      $cn =~ s/^dn:+\s*cn=([^=]+)(,\s*mail=.*)??$/$1/;
     
      # Si la ligne cn n'est pas renseignée, elle doit commencer par "dn:"
      # on doit donc vérifier cela, et donner un nom unique pour cette entrée
     
      if($cn =~ /^dn:/){
    	$cn = "NoName " . $unknown_index++;
      }
     
      # On effectue une vérification sur le champ cn (pas de virgules)
      $cn =~ s/,/ /g;
     
      # On créer un nouveau champ "dn"
      $_ = $prefix . "cn=" . $cn . $basedn . "\n";
    }
     
    	if($_ =~ /^(cn:+\s*)/){
    		$_ = $1 . $cn . "\n";
    	}
     
    # Suppression ou modification des champs inutiles, et non reconnu par Iplanet Directory Server
    s/^homeStreet:/mozillaHomeUrl:/;
    s/^modifytimestamp.*\n//;
    s/^xmozillausehtmlmail.*\n//;
    s/^nsAIMid.*\n//;
     
    # Modification des champs Objectclass et ajout du champ groupeunix (necessaire pour les ACL)
    s/^objectclass: mozillaAbPersonObsolete.*\n//;
    s/^objectclass: mozillaAbPersonAlpha.*\n//;
    s/^objectclass: organizationalPerson.*\n//;
    s/^objectclass: mozillaOrgPerson*\n//;
    s/^objectclass: inetOrgPerson.*/groupeunix: ditiric/;
    s/^objectclass: person.*/objectclass: extensibleObject/;
    Pour le lancer, j'execute la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl script.pl nom_du_fichier_surlequel_appliquer_le_script
    Ce que je souhaite faire, c'est choisir le fichier surlequel appliquer le script à partir d'une page en php, et des que j'appuis sur la touche convertir, que le script s'applique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    <body>
      <table border="0" valign="center" cellpadding="0" cellspacing="0" height="100%" width="100%">
       <tr>
          <td>
          <form name="conversion" action="thunderbird_to_ldif.pl" method="post" enctype="multipart/form-data">
          <input type="submit" value="Convertir le fichier">
          </form>
          </td>					
      </tr>
      </table>
    </body>
    </html>
    Je ne vois pas trop comment modifier mon script Perl pour y arriver.
    Auriez vous des idées ?

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour,

    Je n'ai pas très bien compris ce que tu voulais faire au final... Tu disposes d'une page PHP si j'ai bien compris, donc pourquoi ne pas faire un formulaire où rentrer le nom du script ?
    Tu travailles avec CGI ?

    Bref, donne plus de précisions, je nage un peu là...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 39
    Points
    39
    Par défaut
    en fait oui, je travaille avec CGI
    J'ai une page en php qui me sert de formulaire, ou je vais chercher mon fichier texte sur lequel appliquer mon script perl.

    Mais c'est bon, j'ai résolu mon probleme (enfin je pense)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 39
    Points
    39
    Par défaut
    Ouah je sens que je suis plus tres loin !!!
    J'aurais juste besoin d'une petite aide ^^

    Quand j'execute mon script en ligne de commande, comme décris avant, le script modifie directement le fichier texte sur lequel il s'applique.
    Alors que lorsque j'applique le script sur le fichier que je choisi a partir de mon formulaire, le fichier ne subit aucune modification

    Je comprends pas trop pourquoi ...
    je mets quand meme le script que j'ai écris

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    #!/bin/perl -i
    use MIME::Base64;
    use warnings;
    use CGI;
     
    local ($filename, $q);
     
    $q = new CGI ;
    $filename = $q -> param("userfile") ;#je récupère le nom du fichier uploadé
    $bongroupeunix = $q -> param("groupeunix") ;
     
    while (<$filename>){
     
     if(not defined $sn_exists){
       $sn_exists = 0;
       $cn_exists = 0;
      # Chemin de la base LDAP ou seront stockés les contacts
       $basedn=",ou=$bongroupeunix,ou=carnets,dc=entreprise,dc=fr";
       $unknown_index = 1;
     }
     
    	 if($_ =~ /^sn:/){
    		 $sn_exists = 1;
    	 }
     
    	 if($_ =~ /^cn:/){
    		 $cn_exists = 1;
    	 }
     
    	 if($_ =~ /^$/){
    		 if($sn_exists == 0){
    			 print "sn: not given\n";			 		
    		 }
     
    		# Si l'attribut "cn" n'existe pas, on doit en créer un
    		# sinon LDAP va compléter le champ avec LDAP_NAMING_VIOLATION
     
    		if($cn_exists == 0){
    		 print "cn: " . $cn . "\n";
    		}
     
    	 $sn_exists = 0;
    	 $cn_exists = 0;
    	 }
     
    	# On décode les lignes encodée en BASE64 pour notre substitution
    	 if($_ =~ /^(\w+):: (.*)/){
    		 $_ = sprintf("%s: %s\n", $1, decode_base64($2));		 
    	 }
     
    # On doit vérifier l'attribut "cn" de la ligne "dn" car certains contacts
    # n'ont pas d'attribut "mail=" définit, on doit donc ajouter notre champ
    # à la fin de la ligne
     if($_ =~ /^(dn:+\s*)/){
       $prefix = $1;
       $cn = $_;
     
     
      # On enlève le retour à la ligne
       chop $cn;
     
      # Extraction du champ cn de la ligne dn
       $cn =~ s/^dn:+\s*cn=([^=]+)(,\s*mail=.*)??$/$1/;
     
      # Si la ligne cn n'est pas renseignée, elle doit commencer par "dn:"
      # on doit donc vérifier cela, et donner un nom unique pour cette entrée
     
       if($cn =~ /^dn:/){
    	 $cn = "NoName " . $unknown_index++;
       }
     
      # On effectue une vérification sur le champ cn (pas de virgules)
       $cn =~ s/,/ /g;
     
      # On créer un nouveau champ "dn"
       $_ = $prefix . "cn=" . $cn . $basedn . "\n";
     }
     
    	 if($_ =~ /^(cn:+\s*)/){
    		 $_ = $1 . $cn . "\n";
    	 }
     
    # Suppression ou modification des champs inutiles, et non reconnu par Iplanet Directory Server
     s/^homeStreet:/mozillaHomeUrl:/;
     s/^modifytimestamp.*\n//;
     s/^xmozillausehtmlmail.*\n//;
     s/^nsAIMid.*\n//;
     
    # Modification des champs Objectclass et ajout du champ groupeunix (necessaire pour les ACL)
     s/^objectclass: mozillaAbPersonObsolete.*\n//;
     s/^objectclass: mozillaAbPersonAlpha.*\n//;
     s/^objectclass: organizationalPerson.*\n//;
     s/^objectclass: mozillaOrgPerson*\n//;
     s/^objectclass: inetOrgPerson.*/groupeunix: $bongroupeunix/;
     s/^objectclass: person.*/objectclass: extensibleObject/;
     }
    Alors la je vois pas trop comment faire Pourtant,j'ai bien l'impression que le script prend bien en compte le fichier uploadé, mais il ne fait aucune modification dessus

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 39
    Points
    39
    Par défaut
    C'est bon j'ai réglé mon problème ^^
    c'etait vraiment tout bete, il suffisait que je créer un fichier et que je mette tous mes résultats dedans

    c'est tellement simple que j'y avais pas pensé
    Si il y a des gens intéréssé par le script, suffit de demander ^^

    Hop j'attaque la suite de mon projet maintenant

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

Discussions similaires

  1. Comment executer un script SQL a partir de la ligne de commande ?
    Par lassaad83 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/08/2007, 11h13
  2. Comment executer un script perl dans un script javascript ?
    Par Hamdi Hedhili dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 01/11/2006, 17h09
  3. Comment executer un script shell en javascript ?
    Par bross dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 14/04/2006, 16h57
  4. comment executer un script perl svp?
    Par nico72 dans le forum Langage
    Réponses: 8
    Dernier message: 13/07/2005, 09h51
  5. [DEBUTANT]Comment executer un script sql
    Par peaceinpal dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2004, 08h44

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