Donc, tu n'as pas fait la mise à jour recommandée par Djibril et Philou?
Donc, tu n'as pas fait la mise à jour recommandée par Djibril et Philou?
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
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"; }
Je n'ai pas fais la mise à jour recommandé par Djibril et Philou pour le moment mais je l'envisage.
Les variables $repfacture et $repbulletin ne sont définies nulle part, semble-t-il.
Et l'utilisation de my dans la ligne
et dans:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 my @Files = GetFilesList my $repfacture;
me paraît pour le moins suspecte. Et je ne comprends l'effet recherché avec ce "my".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Files = GetFilesList my $repbulletin;
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
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/
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
J'ai installé Strawberry Perl,
Voici mon code pour essayer de récupérer les informations que je souhaite :
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,
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"; }
j'obtiens ce que je souhaite.
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 :
Voici ce que m'affiche ce 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
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);
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.
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:
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.
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', $_); }
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
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.
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.
Voici 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 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);
[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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager