Merci c reslou
et longue vie A ce forum
Merci c reslou
et longue vie A ce forum
Bonjour. Et qu'est-ce que tu attend de nous exactement ?Envoyé par theblow_wind
Que l'on fasse l'exo à ta place ? Si oui, tu risques d'attendre longtemps mais dans le cas contraire, montre nous le code que tu as fait de ton côté et on essaiera de t'aider
Bonjour,
Je n'utilise jamais le passage d'arguments en ligne de commande mais tu dois utiliser la variable @ARGV
Tu lances ton script dans la console "nomfichier.pl argument1 argument2"
Enfin quelque chose comme ça, renseigne toi
Tu récupères le nom du fichier ainsi que le mot clé dans des variables:Passage d'arguments
Les arguments passés par la ligne de commande sont stockés dans le tableau @ARGV et pour accéder à l'argument n on utilise $ARGV[n].
my $File = $ARGV[0];
my $Word = $ARGV[1];
Tu ouvres ton fichier et tu le lis ligne par ligne en y recherchant ton mot clé
if ( $ligne =~ /$Word/i){} le i permet d'ignorer la case
Voila la façon de procéder, inspire toi s'en.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 # Ouverture du fichier #---------------------- open (File,$File) or die "Can't open file\n"; # Lecture du fichier #-------------------- my $Ligne; my $i =0; while ($Ligne=<File>) { $i++; if ( $Ligne =~ /$Word/i){ print $i;} }
Bon travail,
Jasmine,
Desolée, je ne sais pas car je n'utilise jamais la ligne de commande. Cherche donc dans la doc du forum.
Jasmine,
Il faut savoir qu'en Perl, contrairement au C par exemple, le nom du programme en lui-même n'est pas stocké dans les paramètres pouvant être fournis au programme. Il est tout simplement stocké dans la variable $0.
Donc, lorsqu'en ligne de commande tu tapes ceci :
1er argument = fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./monscript fichier motcherher -optiondecasse
2ème = motcherché
3ème = optiondecasse
Tous ces arguments sont stockés dans la liste @ARGV et tu accèderas à chacun des arguments respectivement par $ARGV[0], $ARGV[1] et $ARGV[2] dans ton cas par exemple.
Juste pour te montrer ce que tu pourrais avoir au début de ton script :
A toi de bien sécuriser les paramètres que ton programme reçoit : il ne faut pas qu'un user puisse taper uniquement le nom du programme sans aucun paramètre et que ton programme fasse son office comme si de rien n'était
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #!/usr/bin/perl use strict; use warnings; my ($fichier, $mot, $option) = @ARGV; print "Fichier à parcourir : $fichier\n"; print "Mot recherché : $mot\n"; print "Option de casse : $option\n";
Dans les 3 paramètres dont ton programme a besoin, les 2 premiers sont obligatoires tandis que le 3è est optionnel. Tu pourrais donc avoir un truc comme ceci :
A toi de jouer pour la suite. Surtout si c'est pour un exercice
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #!/usr/bin/perl use strict; use warnings; my ($fichier, $mot, $option) = @ARGV; if (! $fichier || ! $mot) { die "Usage : $0 <fichier> <mot recherché> <casse caractère (option)>\n"; }
Pour traiter des ensemble d'arguments complexes, je conseille d'utiliser un module de la famille Getopt::* sinon ça devient vite le bordel. Getopt::Std et Getopt::Long sont distribués en standard avec Perl et permettent déjà énormément de choses (surtout Getopt::Long).
--
Jedaï
merci A vous tous je vais essayer de faire tout ca avec des @_ et ARGV
merci bcq de votre collaboration.
On n'est pas obligé d'utiliser un $i explicite ici, Perl garde la trace de la ligne courante dans le fichier qu'il est en train de lire, dans la variable $. :Envoyé par Jasmine80
--
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 #! /usr/bin/env perl use strict; use warnings; use version; our $VERSION = qv('v0.0.1'); use Getopt::Std; $Getopt::Std::STANDARD_HELP_VERSION = 1; my %opts; #option -i to ignore case getopts('i', \%opts); HELP_MESSAGE() and exit 1 if @ARGV != 2; my ($input_file, $key_word) = @ARGV; my $rx = $opts{i} ? qr/\Q$key_word\E/i : qr/\Q$key_word\E/; open my($input), '<', $input_file or die "Can't open file\n"; while ( my $line = <$input> ) { print $. if $line =~ m/$rx/; } close $input; sub HELP_MESSAGE { print STDERR <<EOU; usage : script.pl [-i] input_file keyword This program will print the line number in the input file where the keyword is present. Options : -i Ignore case for the keyword search EOU } sub VERSION_MESSAGE { print STDERR "version : $VERSION\n"; } __END__
Jedaï
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