Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut interpretation de variable

    Bonjour,

    J'ai un problème d'interpréation de variable sur des liens UNC.

    Je m'explique, j'ouvre un fichier qui contient des chemins de répertoires, dans leque je veux lister les fichiers. Mon problème, lorsque mon chemin est un lien UNC, les "\\" sont mal interprétés.

    si par exemple, je remplace ma variale $RepertoireATraite par
    my @ListFile = glob(/\\Serveurfinancial\\buget1\\*.*"); alors il liste le contenu du répertoire.

    Merci pour votre aide.

    Mon fichier TABLE_CLASSE_FILE.txt ressemble à cela :
    ##Table Commentaire
    ##------------------------
    ##C:\Financier\buget
    ##\\Serveurfinancial\buget1


    Voici mon scipt :

    Code :
    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
     
     
    my $Table_Classement="$DATAP/TABLE_CLASSE_FILE.txt" ;
    my $Ligne="";
    my $RepertoireATraite="";
     
    open (FIC, "$Table_Classement") || die "Ouverture impossible du fichier $Table_Classement : $!";
     
    while ($Ligne = <FIC> ) 
    {  
         if($Ligne !~ /^##/)
         {
    	$Ligne =~ s/[\t\s\#]//g; #Suppression des espaces et tabulation
    	$RepertoireATraite=qw($Ligne);
    	print "${Ligne}\n";
     
    	my @ListFile = glob("${RepertoireATraite}/*.*");
     
    	foreach $Monfichier_Entier (@ListFile) 
    	{
    	      $nbfic++;
                       print "$Monfichier_Entier\n";
                 }
     
    close (FIC);

  2. #2
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut j'ai trouve

    il fallait faire quotemata($Ligne)

    Merci quand meme

  3. #3
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 849
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 849
    Points : 3 350
    Points
    3 350

    Par défaut

    Je ne sais pas si tu as utilisé quotemeta à la place de qw sur cette ligne
    Code :
    $RepertoireATraite=qw($Ligne);
    Si oui, tant mieux, sinon, qw n'est pas du tout indiqué pour cette affectation. En effet, qw retourne une liste de scalaire constituée de chaque mot (séparé par espace) se trouvant en paramètre de qw. Pour une affectation en contexte scalaire de qw($Ligne), tu auras la chaine '$Ligne' (non interpolée) dans $RepertoireATraite.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

  4. #4
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut

    J'ai utilisé quotemeta.

    Maintenant il voie bien mon lien UNC pour voir les fichiers et les traites.

    Le problème, c'est qu'il me rajoute des "\\" à la pelle.

    exemple :
    \\\\Serveur1\\budget\\financier\2012\11\2012115_105423_429__PRINT.txt


    Comment puis je faire pour avoir la ligne ci-dessous, à partir de ma ligne ci-dessus :
    \\Serveur1\budget\financier\2012\11\2012115_105423_429__PRINT.txt

    Comment subsituer les \\ par une seul \, si le cas se présente !!

    Merci d'avance

  5. #5
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 849
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 849
    Points : 3 350
    Points
    3 350

    Par défaut

    Peux-tu expliquer comment tu vois les \ en plus ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

  6. #6
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut

    En fait à partir du moment ou je mets quotemeta, dans le resultat de la variable $RepertoireATraite, les "\" sont doublés "\\".

    \\\\ServerCompta\\Financier\\budget\\2012_11

    Alors qu'au départ, j'avais :
    \\ServerCompta\Financier\budget\2012_11


    my $Table_Classement="$DATAP/TABLE_CLASSE_FILE.txt" ;
    my $Ligne="";
    my $RepertoireATraite="";

    open (FIC, "$Table_Classement") || die "Ouverture impossible du fichier $Table_Classement : $!";

    while ($Ligne = <FIC> )
    {
    if($Ligne !~ /^##/)
    {
    $Ligne =~ s/[\t\s\#]//g; #Suppression des espaces et tabulation
    $RepertoireATraite=quotemeta($Ligne);
    print "${Ligne}\n";

    my @ListFile = glob("${RepertoireATraite}/*.*");

    foreach $Monfichier_Entier (@ListFile)
    {
    $nbfic++;
    print "$Monfichier_Entier\n";
    }

    close (FIC);

  7. #7
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut

    Merci d'avance pour votre aide !! car je séche

  8. #8
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 849
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 849
    Points : 3 350
    Points
    3 350

    Par défaut

    Une substitution de ce type :
    Devrait faire l'affaire, mais j'ai du mal à comprendre qu'il te faille defaire ce que quotemeta fait pour que ça fonctionne !
    J'ai le sentiment que tu t'y prend mal.

    Pourrais-tu indiquer ici même comment s'affiche le résultat de cette ligne :
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

  9. #9
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut

    voici le résultat de mon print :
    \\\\Budget\\financier\\compta\\pole\

  10. #10
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut

    En fait mon probléme réside que mon fichier toto.txt dan lequel je vais récupérer les chemins ne sont pas forcement vu par mon programme perl, quand je souhaite scruter les fichiers contenus dans ces répertoires.

    toto.txt :
    #C:\Financier\buget\toto
    #\\Serveurfinancial\buget1\titi

    Si je ne mets pas quotemeta, alors la ligne \\Serveurfinancial\buget1 qui correspond à mon lien UNC n'est pas reconnu. Et si je mets quotemeta, alors ma ligne C:\Financier\buget n'est pas bien interprété.

    1er cas :
    Si je mets quotemeta, voici le résultat de mon print pour les lignes :
    C\:\Financier\\\\budget\\toto.
    \\\\Serveurfinancial\\buget1\\titi

    2ime cas :
    Si je ne mets pas le quotemeta, voici le resultat de mon print :
    C:\Financier\buget\toto
    \\Serveurfinancial\buget1\titi

    On pourrait croire que le programme a lu les fichiers contenus dans ces répertoires, mais seul la première ligne a été vu avec X fcihiers.
    Pour la seconde ligne \\Serveurfinancial\buget1\titi, il y aurait 0 fichiers, alors qu'en vérité, il y a en a + de 100.


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    while ($Ligne = <FIC> ) 
    {  
     if($Ligne !~ /^##/)
    {
        $Ligne =~ s/[\t\s\#]//g; #Suppression des espaces et tabulation
        $RepertoireATraite=quotemeta($Ligne);
    est ce que quelqu'un aurait une idée sur le sujet ?

  11. #11
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 849
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 849
    Points : 3 350
    Points
    3 350

    Par défaut

    Je pense simplement que la fonction glob ne supporte pas les chemins UNC.
    Il te faut peut-être utiliser File::Glob::Windows ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

  12. #12
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut

    je vais faire le test.

    Merci pour toon aide.

  13. #13
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 549
    Points : 33
    Points
    33

    Par défaut

    Concernant le File::Glob::Windows,

    Lorsque je le lance, il m'affiche mes fichiers comme je le voudrais, mais en plus, il m'affiche tout au début de ma lise :
    .
    ..

    Comment faire pour ne pas avoir ces points.

    Merci d'avance

  14. #14
    Expert Confirmé

    Inscrit en
    avril 2009
    Messages
    2 849
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : avril 2009
    Messages : 2 849
    Points : 3 350
    Points
    3 350

    Par défaut

    Ajoute un filtre du style :

    Code :
    1
    2
    3
    if ($file !~ /^\.{1,2}$/) {
      # traitement du fichier
    }
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Using strict and warnings is good for you.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •