Pouvez-vous me confirmer que l'on ne peut pas compter le nombre d'occurences
avec l'option -c en perl contrairement à la ligne de commande
on est obligé de passer par system ?
ou y a t'il mieux pour compter le nombre d'occurences "toto" dans un fichier
/etc/titi.txt"
à priori $nb = grep ("-c" ,"toto" ,"/etc/titi.txt"); ne fonctionne pas
Merci de votre aide
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
gerbier
mbfac wrote:
Bonjour
Pouvez-vous me confirmer que l'on ne peut pas compter le nombre d'occurences avec l'option -c en perl contrairement à la ligne de commande on est obligé de passer par system ? ou y a t'il mieux pour compter le nombre d'occurences "toto" dans un fichier /etc/titi.txt" à priori $nb = grep ("-c" ,"toto" ,"/etc/titi.txt"); ne fonctionne pas
les commandes grep (unix) et grep (perl) sont de "faux-amis" : elles n'ont pas la même syntaxe : cf perldoc -f grep et man grep
mbfac wrote:
Bonjour
Pouvez-vous me confirmer que l'on ne peut pas compter le nombre d'occurences
avec l'option -c en perl contrairement à la ligne de commande
on est obligé de passer par system ?
ou y a t'il mieux pour compter le nombre d'occurences "toto" dans un fichier
/etc/titi.txt"
à priori $nb = grep ("-c" ,"toto" ,"/etc/titi.txt"); ne fonctionne pas
les commandes grep (unix) et grep (perl) sont de "faux-amis" : elles
n'ont pas la même syntaxe : cf perldoc -f grep et man grep
Pouvez-vous me confirmer que l'on ne peut pas compter le nombre d'occurences avec l'option -c en perl contrairement à la ligne de commande on est obligé de passer par system ? ou y a t'il mieux pour compter le nombre d'occurences "toto" dans un fichier /etc/titi.txt" à priori $nb = grep ("-c" ,"toto" ,"/etc/titi.txt"); ne fonctionne pas
les commandes grep (unix) et grep (perl) sont de "faux-amis" : elles n'ont pas la même syntaxe : cf perldoc -f grep et man grep
Klaus
mbfac wrote:
Pouvez-vous me confirmer que l'on ne peut pas compter le nombre d'occuren ces avec l'option -c en perl
on peut compter le nombre d'occurences avec l'option -c en perl (il suffit de mettre le programme dans la section BEGIN{...} )
--- pour info, j'utilise Activestate perl 5.8.8 sous Windows XP ---
Par exemple, pour compter le nombre d'ocurrences d'une liste de 3 éléments ('a', 'b', 'c'): ====================== C:>perl -c -e "BEGIN{ my @liste = ('a','b','c'); print q{nombre d'occurences = }, scalar(@liste), qq{n} }" ======================
résultat: ====================== nombre d'occurences = 3 -e syntax OK ======================
voir aussi: http://perl.enstimac.fr/DocFr/perlrun.html ====================== [...] -c indique à Perl de vérifier la syntaxe du programme et de sortir ensuite sans l'exécuter. En fait, il va exécuter BEGIN, CHECK, et les blocs use, car ils sont considérés comme existants en dehors de l'exécution de votre programme. Les blocs INIT et END seront toutefois passés. [...] ======================
contrairement à la ligne de commande on est obligé de passer par system ?
On n'est pas obligé de passer par système, on peut également mettre l'option "-c" sur la ligne première ligne "#!C:Perlbinperl..." du programme:
ou y a t'il mieux pour compter le nombre d'occurences "toto" dans un fich ier /etc/titi.txt"
Oui. Il faut virer l'option "-c" en perl qui sert uniquement à la compilation.
Voici un programme pour compter le nombre d'occurences "toto" dans un fichier "titi.txt": ====================== use strict; use warnings;
my $nom = 'titi.txt'; my $cherche = 'toto';
my $nb_occ = 0; my $nb_lig = 0; my $nb_tot = 0;
open my $f, '<', $nom or die "Erreur: lecture fichier '$nom' ($!)"; while (<$f>) { my @w = /Q$chercheE/g; $nb_tot++; $nb_occ += @w; $nb_lig++ if @w; } close $f;
print qq{Fichier concerne est "$nom"n}; print qq{Le nombre de lignes totale est $nb_totn}; print qq{Le nombre de lignes avec "$cherche" est $nb_lign}; print qq{Le nombre d'occurences "$cherche" est $nb_occn}; ======================
voici le contenu du fichier "titi.txt": ====================== abc toto fgkjfg toto dfsklqjs toto titi uuuuuu tot oto toto ======================
voici le résultat: ====================== Fichier concerne est "titi.txt" Le nombre de lignes totale est 7 Le nombre de lignes avec "toto" est 2 Le nombre d'occurences "toto" est 4 ======================
à priori $nb = grep ("-c" ,"toto" ,"/etc/titi.txt"); ne fonctionne p as
Ce n'est pas la bonne syntaxe de "grep()", en fait, grep travaille sur les listes et non pas sur les fichiers.
voir "grep()" dans "perlfunc": http://perl.enstimac.fr/DocFr/perlfunc.html#item_grep
mbfac wrote:
Pouvez-vous me confirmer que l'on ne peut pas compter le nombre d'occuren ces
avec l'option -c en perl
on peut compter le nombre d'occurences avec l'option -c en perl (il
suffit de mettre le programme dans la section BEGIN{...} )
--- pour info, j'utilise Activestate perl 5.8.8 sous Windows XP ---
Par exemple, pour compter le nombre d'ocurrences d'une liste de 3
éléments ('a', 'b', 'c'):
======================
C:>perl -c -e "BEGIN{ my @liste = ('a','b','c'); print q{nombre
d'occurences = }, scalar(@liste), qq{n} }"
======================
résultat:
======================
nombre d'occurences = 3
-e syntax OK
======================
voir aussi: http://perl.enstimac.fr/DocFr/perlrun.html
======================
[...]
-c
indique à Perl de vérifier la syntaxe du programme et de sortir
ensuite sans l'exécuter. En fait, il va exécuter BEGIN, CHECK, et les
blocs use, car ils sont considérés comme existants en dehors de
l'exécution de votre programme. Les blocs INIT et END seront toutefois
passés.
[...]
======================
contrairement à la ligne de commande
on est obligé de passer par system ?
On n'est pas obligé de passer par système, on peut également mettre
l'option "-c" sur la ligne première ligne "#!C:Perlbinperl..." du
programme:
ou y a t'il mieux pour compter le nombre d'occurences "toto" dans un fich ier
/etc/titi.txt"
Oui. Il faut virer l'option "-c" en perl qui sert uniquement à la
compilation.
Voici un programme pour compter le nombre d'occurences "toto" dans un
fichier "titi.txt":
======================
use strict;
use warnings;
my $nom = 'titi.txt';
my $cherche = 'toto';
my $nb_occ = 0;
my $nb_lig = 0;
my $nb_tot = 0;
open my $f, '<', $nom or die "Erreur: lecture fichier '$nom' ($!)";
while (<$f>) { my @w = /Q$chercheE/g;
$nb_tot++;
$nb_occ += @w;
$nb_lig++ if @w;
}
close $f;
print qq{Fichier concerne est "$nom"n};
print qq{Le nombre de lignes totale est $nb_totn};
print qq{Le nombre de lignes avec "$cherche" est $nb_lign};
print qq{Le nombre d'occurences "$cherche" est $nb_occn};
======================
voici le contenu du fichier "titi.txt":
======================
abc
toto fgkjfg toto dfsklqjs toto
titi
uuuuuu
tot
oto
toto
======================
voici le résultat:
======================
Fichier concerne est "titi.txt"
Le nombre de lignes totale est 7
Le nombre de lignes avec "toto" est 2
Le nombre d'occurences "toto" est 4
======================
à priori $nb = grep ("-c" ,"toto" ,"/etc/titi.txt"); ne fonctionne p as
Ce n'est pas la bonne syntaxe de "grep()", en fait, grep travaille sur
les listes et non pas sur les fichiers.
voir "grep()" dans "perlfunc":
http://perl.enstimac.fr/DocFr/perlfunc.html#item_grep
Pouvez-vous me confirmer que l'on ne peut pas compter le nombre d'occuren ces avec l'option -c en perl
on peut compter le nombre d'occurences avec l'option -c en perl (il suffit de mettre le programme dans la section BEGIN{...} )
--- pour info, j'utilise Activestate perl 5.8.8 sous Windows XP ---
Par exemple, pour compter le nombre d'ocurrences d'une liste de 3 éléments ('a', 'b', 'c'): ====================== C:>perl -c -e "BEGIN{ my @liste = ('a','b','c'); print q{nombre d'occurences = }, scalar(@liste), qq{n} }" ======================
résultat: ====================== nombre d'occurences = 3 -e syntax OK ======================
voir aussi: http://perl.enstimac.fr/DocFr/perlrun.html ====================== [...] -c indique à Perl de vérifier la syntaxe du programme et de sortir ensuite sans l'exécuter. En fait, il va exécuter BEGIN, CHECK, et les blocs use, car ils sont considérés comme existants en dehors de l'exécution de votre programme. Les blocs INIT et END seront toutefois passés. [...] ======================
contrairement à la ligne de commande on est obligé de passer par system ?
On n'est pas obligé de passer par système, on peut également mettre l'option "-c" sur la ligne première ligne "#!C:Perlbinperl..." du programme:
ou y a t'il mieux pour compter le nombre d'occurences "toto" dans un fich ier /etc/titi.txt"
Oui. Il faut virer l'option "-c" en perl qui sert uniquement à la compilation.
Voici un programme pour compter le nombre d'occurences "toto" dans un fichier "titi.txt": ====================== use strict; use warnings;
my $nom = 'titi.txt'; my $cherche = 'toto';
my $nb_occ = 0; my $nb_lig = 0; my $nb_tot = 0;
open my $f, '<', $nom or die "Erreur: lecture fichier '$nom' ($!)"; while (<$f>) { my @w = /Q$chercheE/g; $nb_tot++; $nb_occ += @w; $nb_lig++ if @w; } close $f;
print qq{Fichier concerne est "$nom"n}; print qq{Le nombre de lignes totale est $nb_totn}; print qq{Le nombre de lignes avec "$cherche" est $nb_lign}; print qq{Le nombre d'occurences "$cherche" est $nb_occn}; ======================
voici le contenu du fichier "titi.txt": ====================== abc toto fgkjfg toto dfsklqjs toto titi uuuuuu tot oto toto ======================
voici le résultat: ====================== Fichier concerne est "titi.txt" Le nombre de lignes totale est 7 Le nombre de lignes avec "toto" est 2 Le nombre d'occurences "toto" est 4 ======================
à priori $nb = grep ("-c" ,"toto" ,"/etc/titi.txt"); ne fonctionne p as
Ce n'est pas la bonne syntaxe de "grep()", en fait, grep travaille sur les listes et non pas sur les fichiers.
voir "grep()" dans "perlfunc": http://perl.enstimac.fr/DocFr/perlfunc.html#item_grep
mbfac
Merci
super tuto !
j'avais bien pensé a faire une boucle sur le fichier mais je pensais que passer par grep serai peut etre plus rapide en plus comme je debute j'ai un peu d'aprehension avec les {([ et autre
Cordialement
Michel BERTRAND
Merci
super tuto !
j'avais bien pensé a faire une boucle sur le fichier mais je pensais que
passer par grep serai peut etre plus rapide en plus comme je debute j'ai un
peu d'aprehension avec les {([ et autre
j'avais bien pensé a faire une boucle sur le fichier mais je pensais que passer par grep serai peut etre plus rapide en plus comme je debute j'ai un peu d'aprehension avec les {([ et autre
Cordialement
Michel BERTRAND
Klaus
mbfac wrote:
j'avais bien pensé a faire une boucle sur le fichier mais je pensais que passer par grep serai peut etre plus rapide en plus comme je debute j'ai un peu d'aprehension avec les {([ et autre
Avec perl on peut également passer par une commande externe (comme, par exemple "grep"):
Sauf sur mon système (Windows XP), je ne possède pas de "grep", mais il y a une commande externe "find".
C:>find /c "toto" titi.txt ---------- TITI.TXT: 2
Donc je présente un exemple qui utilise la commande "find /c" (mais ça devrait marcher pareil avec la commande "grep -c")
========================= ======== use strict; use warnings;
my $nom = 'titi.txt'; my $cherche = 'toto';
open my $f, qq{find /c "$cherche" $nom |} or die "Erreur: commande find /c $cherche $nom ($!)";
while (<$f>) { if (/^-+s+([^:]+):s+(d+)/) { print qq{Fichier "$1", nbr lignes avec "$cherche" est $2n}; } }
close $f; ========================= ========
résultat: ========================= ======== Fichier "TITI.TXT", nbr lignes avec "toto" est 2 ========================= ========
mbfac wrote:
j'avais bien pensé a faire une boucle sur le fichier mais je pensais que
passer par grep serai peut etre plus rapide en plus comme je debute j'ai un
peu d'aprehension avec les {([ et autre
Avec perl on peut également passer par une commande externe (comme,
par exemple "grep"):
Sauf sur mon système (Windows XP), je ne possède pas de "grep", mais
il y a une commande externe "find".
C:>find /c "toto" titi.txt
---------- TITI.TXT: 2
Donc je présente un exemple qui utilise la commande "find /c" (mais
ça devrait marcher pareil avec la commande "grep -c")
========================= ========
use strict;
use warnings;
my $nom = 'titi.txt';
my $cherche = 'toto';
open my $f, qq{find /c "$cherche" $nom |}
or die "Erreur: commande find /c $cherche $nom ($!)";
while (<$f>) {
if (/^-+s+([^:]+):s+(d+)/) {
print qq{Fichier "$1", nbr lignes avec "$cherche" est $2n};
}
}
close $f;
========================= ========
résultat:
========================= ========
Fichier "TITI.TXT", nbr lignes avec "toto" est 2
========================= ========
j'avais bien pensé a faire une boucle sur le fichier mais je pensais que passer par grep serai peut etre plus rapide en plus comme je debute j'ai un peu d'aprehension avec les {([ et autre
Avec perl on peut également passer par une commande externe (comme, par exemple "grep"):
Sauf sur mon système (Windows XP), je ne possède pas de "grep", mais il y a une commande externe "find".
C:>find /c "toto" titi.txt ---------- TITI.TXT: 2
Donc je présente un exemple qui utilise la commande "find /c" (mais ça devrait marcher pareil avec la commande "grep -c")
========================= ======== use strict; use warnings;
my $nom = 'titi.txt'; my $cherche = 'toto';
open my $f, qq{find /c "$cherche" $nom |} or die "Erreur: commande find /c $cherche $nom ($!)";
while (<$f>) { if (/^-+s+([^:]+):s+(d+)/) { print qq{Fichier "$1", nbr lignes avec "$cherche" est $2n}; } }
close $f; ========================= ========
résultat: ========================= ======== Fichier "TITI.TXT", nbr lignes avec "toto" est 2 ========================= ========