[perl] commentaires

Fermé
vincent02 Messages postés 9 Date d'inscription lundi 15 mai 2006 Statut Membre Dernière intervention 24 juin 2006 - 11 juin 2006 à 19:08
tatsuyad Messages postés 74 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 3 avril 2016 - 22 août 2015 à 07:25
Salut,
J'ai un script en perl, il fonctionne mais malheuresement je connais rien au Perl. Pourriez vous me mettre les commentaires s'il vous plait ?

meri beaucoup ;)

#! /usr/bin/perl

use warnings;use strict;
open(FILE,"resultado2.txt");

while (<FILE>){

open(STDOUT,">>resultado3.txt");
print "$1\n" if /.*\((.*)\).*/;

}
__END__

2 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
11 juin 2006 à 22:15
Salut,

j'ai fait quelques modifications
#! /usr/bin/perl
#
use warnings;use strict;

# use warnings c'est une pragma de portée lexicale qui permet
# de contrôler les averstissements de Perl
#
# use strict - pragma qui impose 3 restrictions
# 1. les variables devront être déclarées
# 2. interdiction des références symboliques
# 3. les chaînes litterales doivent être entre guillemets
#
# Pragma = c'est une indication donnée au compilateur
# 
open LIRE,"resultado2.txt" # ouverture d'un handle de fichier en lecture
	or die "E/S: $!\n";# quitte le programme avec message d'erreur,
			   # si besoin

open ECRIRE,">>resultado3.txt" # ouverture d'un handel de fichier en mode
			       # écriture (mode ajouter)
	or die "E/S: $!\n";    # quitte le programme avec un message d'erreur

# a eviter d'utiliser STDOUT comme nom d'un handle de fichier
# STDOUT est un handle prédefini ( la sortie par défaut )
#
# en mettant dans la boucle l'ouverture d'un handle
# comme tu l'as fait ce n'est pas très efficace
# à chaque lecture de ligne le handle est ouvert et puis traitement fermé
# imagine un traitement d'un fichier de ~123 lignes (et ça en 64 bits)
# 
while (<LIRE>){ # utilisation d'opérateur diamant pour lire le handle
	# j'écrit dans le handle le contenu des paranthèses
	# si la ligne a le format: ttt (uuu) è_udif
	# donc quelque chose ou rien(quelque chose)quelque chose ou rien
	print ECRIRE "$1\n" if /.*\((.*)\).*/;
}
close LIRE;
close ECRIRE;

# Explication de la regex
# /.*\((.*)\).*/
#
# le 1er .* va avaler toutes la ligne et ensuite sous contrainte
# va laisser tout pour reconnaître une paranthèse ouvrante
# une fois trouvée la paranthèse (.*) la regex avale de nouveau tout
# et ensuite sous contrainte va rennoncer a son butin pour reconnaître
# la paranthèse fermante )
# et le contenu des ( et ) est stocké dans $1
# le dernier .* avale le reste de la ligne
#
# Tout ce qui est écrit après __END__ peut être avec le handle DATA
# dans ton cas bas besoin
Et l'exécution
lami20j@ubuntu:~/bin/my_deb_perl$ cat resultado2.txt
jjj(lll)kk
aaaaaaa
hhh(uuu)kkk
$$$(;;)
---jkj(kjk

lami20j@ubuntu:~/bin/my_deb_perl$ perl ccm_comment_vincent.pl
lami20j@ubuntu:~/bin/my_deb_perl$ cat resultado3.txt
lll
uuu
;;
lami20j@ubuntu:~/bin/my_deb_perl$
lami20j
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
11 juin 2006 à 22:29
Re,

à savoir que la regex que tu utilises c'est vraiement banale.
il faut savoir la structure de fichier et ce que tu veux obtenir comme résultat pour pouvoir construire la regex

Regarde par exemple ce qu'on obtiens avec le même script mais pas les mêmes données en entrées (en fait j'ai ajouté une ligne)

lami20j@ubuntu:~/bin/my_deb_perl$ cat resultado2.txt
jjj(lll)kk
aaaaaaa
hhh(uuu)kkk
$$$(;;)
---jkj(kjk
paran(th(èses)imbriquées)ça ne (marche pas(comme tu veux))

lami20j@ubuntu:~/bin/my_deb_perl$ perl ccm_comment_vincent.pl
lami20j@ubuntu:~/bin/my_deb_perl$ cat resultado3.txt
lll
uuu
;;
comme tu veux)
lami20j@ubuntu:~/bin/my_deb_perl$
lami20j
0
tatsuyad Messages postés 74 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 3 avril 2016
22 août 2015 à 07:25
Merci,vous m'avez rapplé la régle élémentaire de Perl !
0