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 utiliser ini en Perl


Sujet :

Langage Perl

  1. #21
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Donc, tu n'as pas fait la mise à jour recommandée par Djibril et Philou?

  2. #22
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    lorsque j'execute la commande perl.exe C:\Perl\lib\script.pl C:\Perl\lib\fichier.ini
    j'obtien ce message d'erreur :
    Pièce jointe 202897

    voici le contenu de mon fichier.ini :
    [repertoire]

    repfacture = C:/Users/baranowp/Documents/2016_01_07_08/facture/
    repbulletin = C:/Users/baranowp/Documents/2016_02_04_05/bulletin_paie/

    [param_facture]

    paramfacture = C:/Users/baranowp/Documents/2016_01_28_29/#param_facture.txt#
    paramfacturelog = C:/Users/baranowp/Documents/2016_01_28_29/#param_facture.log#

    et voici mon code :
    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
     
    use strict;
    use warnings;
     
    sub GetFilesList 
    {
            our $Path = $_[0];
            our $FileFound;
            our @FilesList=();
     
            ## Lecture de la liste des fichiers
            opendir (our $FhRep, $Path)
                    or die "Impossible d'ouvrir le repertoire $Path\n";
            our @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
            closedir ($FhRep);
     
            foreach  $FileFound (@Contenu) {
                    ## Traitement des fichiers
                    if ( -f "$Path/$FileFound") {
                            push ( @FilesList, "$Path/$FileFound" );
                    }
                    ## Traitement des repertoires
                    elsif ( -d "$Path/$FileFound") {
                            ## Boucle pour lancer la recherche en mode recursif
                            push (@FilesList, GetFilesList("$Path/$FileFound") );
                    }
            }
            return @FilesList;
    }
    my @Files = GetFilesList my $repfacture;
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    }
     
    @Files = GetFilesList my $repbulletin;
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    }

  3. #23
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Je n'ai pas fais la mise à jour recommandé par Djibril et Philou pour le moment mais je l'envisage.

  4. #24
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Les variables $repfacture et $repbulletin ne sont définies nulle part, semble-t-il.

    Et l'utilisation de my dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my @Files = GetFilesList my $repfacture;
    et dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @Files = GetFilesList my $repbulletin;
    me paraît pour le moins suspecte. Et je ne comprends l'effet recherché avec ce "my".

  5. #25
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Les variables repfacture et repbulletin sont définis dans le fichier ini comme ceci :

    repfacture = C:/Users/baranowp/Documents/2016_01_07_08/facture/
    repbulletin = C:/Users/baranowp/Documents/2016_02_04_05/bulletin_paie/

    Pour pouvoir les utiliser dans mon programme il faut que je l'ai déclare soit avec "my" soit avec "our" ?
    Sachant que si j'écris my $repfacture il doit faire référence à sa : C:/Users/baranowp/Documents/2016_01_07_08/facture/

  6. #26
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je dis, et je répète, qu'il ne faut pas installer les scripts "personnels" dans c:\Perl\lib
    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é
    Si c'est utile, say

  7. #27
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    J'ai installé Strawberry Perl,
    Voici mon code pour essayer de récupérer les informations que je souhaite :
    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
     
    se strict;
    use warnings;
    use Config::IniFiles;
     
    my @directories_to_process;
    my @filelist;
    my $cfg = Config::IniFiles->new( -file => $ARGV[0] );
    foreach ('REP_FACTURE','REP_BULLETIN') {
    	  push @directories_to_process, $cfg->val('repertoire', $_) if $cfg->val('repertoire', $_);
    	  }
     
    sub GetFilesList 
    {
            my $Path = $_[0];
            my $FileFound;
            my @FilesList=();
     
            ## Lecture de la liste des fichiers
            opendir (my $FhRep, $Path)
                    or die "Impossible d'ouvrir le repertoire $Path\n";
            my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
            closedir ($FhRep);
     
            foreach my $FileFound (@Contenu) {
                    ## Traitement des fichiers
                    if ( -f "$Path/$FileFound") {
                            push ( @FilesList, "$Path/$FileFound" );
                    }
                    ## Traitement des repertoires
                    elsif ( -d "$Path/$FileFound") {
                            ## Boucle pour lancer la recherche en mode recursif
                            push (@FilesList, GetFilesList("$Path/$FileFound") );
                    }
            }
            return @FilesList;
    }
     
    #### 1ere methode ####
     
    my @Files = GetFilesList ($directories_to_process[0]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    }
     
    @Files = GetFilesList  ($directories_to_process[1]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    }
    Lorsque j'utilise ma commande perl.exe C:\Users\baranowp\Documents\2016_03_07_11\param.pl C:\Users\baranowp\Documents\2016_03_07_11\param.ini,
    j'obtiens ce que je souhaite.

  8. #28
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Maintenant il ne me reste plus qu'à traiter la seconde partie du fichier d'initialisation qui sont les fichiers paramètres
    Contenu du fichier d'initialisation :
    [repertoire]
    REP_FACTURE=C:\Users\baranowp\Documents\2016_01_07_08\facture\
    REP_BULLETIN=C:\Users\baranowp\Documents\2016_02_04_05\bulletin_paie\

    [param_facture]
    PARAM_FACTURE=C:\Users\baranowp\Documents\2016_01_28_29\param_facture.txt
    PARAM_FACTURE_LOG=C:\Users\baranowp\Documents\2016_01_28_29\param_facture.log

    Voici le programme utilisé pour traiter le fichier d'initialisation :
    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
    use strict;
    use warnings;
    use Config::IniFiles;
     
    my @directories_to_process;
    my @parametre;
    my @filelist;
    my $cfg = Config::IniFiles->new( -file => $ARGV[0] );
    foreach ('REP_FACTURE','REP_BULLETIN') {
    	  push @directories_to_process, $cfg->val('repertoire', $_) if $cfg->val('repertoire', $_);
    	  }
    foreach ('PARAM_FACTURE','PARAM_FACTURE_LOG') {
    	  push @parametre, $cfg->val('param_facture', $_) if $cfg->val('param_facture', $_);
    	  }
    sub GetFilesList 
    {
            my $Path = $_[0];
            my $FileFound;
            my @FilesList=();
     
            ## Lecture de la liste des fichiers
            opendir (my $FhRep, $Path)
                    or die "Impossible d'ouvrir le repertoire $Path\n";
            my @Contenu = grep { !/^\.\.?$/ } readdir($FhRep);
            closedir ($FhRep);
     
            foreach my $FileFound (@Contenu) {
                    ## Traitement des fichiers
                    if ( -f "$Path/$FileFound") {
                            push ( @FilesList, "$Path/$FileFound" );
                    }
                    ## Traitement des repertoires
                    elsif ( -d "$Path/$FileFound") {
                            ## Boucle pour lancer la recherche en mode recursif
                            push (@FilesList, GetFilesList("$Path/$FileFound") );
                    }
            }
            return @FilesList;
    }
    my @Files = GetFilesList ($directories_to_process[0]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    }
     
    @Files = GetFilesList  ($directories_to_process[1]);
    foreach my $File  (@Files) { 
    	next unless $File =~ /\.txt$/i;
    	print "$File \n";
    }
     
    my @tab = ();
    #my @tab1 = ();
     
    my $file =$parametre[0]; ###param_facture.txt ###
    open(my $fic,$file) or die "$file: $!" ;
    my $param_facture = $parametre[1]; ### param_facture.log###
    open my $PARAM, ">", "$param_facture" or die "Ouverture impossible de $param_facture $!"; 
     
     
    ## parcours les lignes du tableau 
    print "facture : \n";
    foreach my $line(<$fic>) {
        chomp($line);
        #print $line."\n";
     
    ## renvoi la position des valeurs qui  m'interesse   
        @tab =split(";", $line);
        print $tab [1]."\n";
        print $tab [3]."\n";
        print $tab [5]."\n";
        print $tab [7]."\n";
    	print "\n";
    	#print $PARAM "$line\n";
    	print $PARAM "$tab[1] $tab[3] $tab[5] $tab[7]\n";
    }    
    #close($fic);
    close ($PARAM);
    Voici ce que m'affiche ce programme :
    La liste des différents fichiers contenu dans les répertoires factures et bulletin_paie et ce message d'erreur :
    Use of uninitialized value $file in open at C:\users\baranowp\Documents\2016_03_07_11\param.pl line 55.
    Use of uninitialized value $file in concatenation (.) or string at C:\users\baranowp\Documents\2016_03_07_11\param.pl line55.

  9. #29
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Le tableau @parametre n'est sans doute pas alimenté correctement (et est sans doute vide). Essaie d'afficher son contenu juste après la ligne 14.

    Je pense que ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach ('PARAM_FACTURE','PARAM_FACTURE_LOG') {
    	  push @parametre, $cfg->val('param_facture', $_) if $cfg->val('param_facture', $_);
    	  }
    ne font sans doute pas ce que tu veux, mais je ne peux en dire plus pour l'instant car je ne connais pas le module Config::IniFiles et n'ai pas le temps maintenant de consulter la documentation.

  10. #30
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Quand je supprime mon fichier param_facture.log et qu'ensuite j'exécute mon programme il me crée un nouveau fichier param_facture.log avec les valeurs que je souhaite.

  11. #31
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 183
    Points : 32
    Points
    32
    Par défaut
    Je rencontre un petit soucis,
    Dans mon programme je ne veux plus voir apparaître d'arborescence de ce fait j'utilise le fichier d'initialisation comme vu précédement, Pour la focntion GetFilesList j'ai réussi à l'utiliser mais pour ce cas de figure je ne vois vraiment pas comment l'utiliser. Pour générer mon fichier de paramètre.log
    Comme ceci ça fonctionne mais je ne veux plus voir l'arborescence.

    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
     
    use strict;
    use warnings;
    use Config::IniFiles;
     
    my @parametre;
     
    foreach ('PARAM_FACTURE','PARAM_FACTURE_LOG') {
    	  push @parametre, $cfg->val('param_facture', $_) if $cfg->val('param_facture', $_);
    	  }
    y @tab = ();
    #my @tab1 = ();
     
    my $file ="C:/Users/baranowp/Documents/2016_01_28_29/param_facture.txt";
    open(my $fic,$file) or die "$file: $!" ;
    my $param_facture = "C:/Users/baranowp/Documents/2016_01_28_29/param_facture.log";
    open my $PARAM, ">", "$param_facture" or die "Ouverture impossible de $param_facture $!"; 
     
     
    ## parcours les lignes du tableau 
    print "facture : \n";
    foreach my $line(<$fic>) {
        chomp($line);
        #print $line."\n";
     
    ## renvoi la position des valeurs qui  m'interesse   
        @tab =split(";", $line);
        print $tab [1]."\n";
        print $tab [3]."\n";
        print $tab [5]."\n";
        print $tab [7]."\n";
    	print "\n";
    	#print $PARAM "$line\n";
    	print $PARAM "$tab[1] $tab[3] $tab[5] $tab[7]\n";
    }    
    #close($fic);
    close ($PARAM);
    Voici le fichier d'initialisation :
    [param_facture]
    PARAM_FACTURE=C:\Users\baranowp\Documents\2016_01_28_29\param_facture.txt
    PARAM_FACTURE_LOG=C:\Users\baranowp\Documents\2016_01_28_29\param_facture.log

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. comment utiliser des scripts Perl dans des pages Html?
    Par mahmoudelect dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 16/03/2010, 14h11
  2. Comment utiliser svn avec perl?
    Par NadyPerl dans le forum Langage
    Réponses: 6
    Dernier message: 01/10/2007, 10h05
  3. comment utiliser les API avec Perl?
    Par megapacman dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2006, 15h18
  4. Réponses: 13
    Dernier message: 25/04/2006, 09h43

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