salut,
je parcours un fichier, écrit de la manière suivante:
PORTE a,b,c,d,e,f,g,
h,i,j,k,
je dois afficher:
a PORTE
b PORTE
c PORTE
d PORTE
e PORTE
f PORTE
g PORTE
....
comment je vais faire?
merci
salut,
je parcours un fichier, écrit de la manière suivante:
PORTE a,b,c,d,e,f,g,
h,i,j,k,
je dois afficher:
a PORTE
b PORTE
c PORTE
d PORTE
e PORTE
f PORTE
g PORTE
....
comment je vais faire?
merci
Bonne question ! Comment vas-tu faire ?Envoyé par bezoindaidde
Tu vas lire le fichier et le parser.
Par exemple :
Ou quelque chose comme ça. (à vrai dire, s'il y a vraiment des sauts de ligne en plein dans ta liste comme dans ton exemple, ça va être un peu plus compliqué)
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 #!/usr/bin/env perl use strict; use warnings; my $filename = shift; open my($data_src), '<', $filename or die "Couldn't open $filename : $!\n"; while( <$data_src> ){ my( $nature, $list ) = m/^(\w+)\s+(.+)$/; my @list = split /,/, $list; print "$_ $nature\n" for @list; } close $data_src; __END__
--
Jedaï
veux tu bien m'expliquer le code??
g du mal à le comprendre le principe...c'est quoi shift, > ...etc?
my( $nature, $list ) = m/^(\w+)\s+(.+)$/; ????
excuse moi, c'est que du perl ??
J'utilise un certain nombre d'idiômes dans mon script, néanmoins rien d'affolant. Par exemple quand tu vois une fonction que tu ne connais pas "shift" ici, tu devrais avoir le réflexe de regarder sa documentation (en tapant "perldoc -f shift" dans une console, ou en consultant le site perldoc, ou la traduction partielle en français). Tu as alors ta réponse (ou pas, selon ton expérience de programmateur...) :
@ARGV est un nom très souvent utilisé (dans beaucoup de langages) pour le tableau des arguments de la ligne de commande. Autrement dit, mon "shift" ici récupère le premier argument de mon programme.Retourne la première valeur d'un tableau après l'avoir supprimée du tableau en rétrécissant sa taille de 1 et en déplaçant tout vers le bas. Renvoie undef si il n'y a pas d'éléments dans le tableau. Si TABLEAU est omis, shift agira soit sur le tableau @_ s'il est dans la portée lexicale d'une subroutine ou d'un format, soit sur le tableau @ARGV s'il est dans la portée lexicale d'un fichier
Quant à tes autres questions, malheureusement "..." n'est pas suffisamment expressif pour que je comprenne ce qu'elles sont...
Et bien dire qu'il ne s'agit que de Perl serait légèrement polémique : en effet la partie m/.../ est écrite dans le langage des regex (expressions régulières), qui permet de parser (c'est à dire décomposer en éléments lexicaux) facilement des expressions simples sous formes de chaînes de caractères. Les regex sont très utilisées en Perl car elles y sont très faciles d'emploi (bien plus que dans la plupart des langages qui permettent leur utilisation).Envoyé par bezoindaidde
Une version légèrement retouchée de mon script, avec commentaires à la clé :
Ca va mieux comme ça ? Néanmoins dis-toi bien qu'on ne prendra pas toujours le temps de te faire un joli code commenté de bout en bout comme celui-ci, il va falloir apprendre un peu les bases de la programmation en Perl pour pouvoir lire un code basique comme une ouverture de fichier suivi d'une lecture et décomposition avec regex, c'est le schéma de base de beaucoup de programmes après tout (Perl est très utilisé pour faire du traitement ou du filtrage de données, texte ou binaires).
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 #!/usr/bin/env perl use strict; use warnings; # récupérer le premier argument du script # on suppose qu'il s'agit du nom du fichier à traiter my $filename = $ARGV[0]; # on ouvre le fichier en lecture ('<'), le handle de fichier est $data_src open my($data_src), '<', $filename or die "Couldn't open $filename : $!\n"; # boucle de lecture, on lit ligne par ligne dans $line while( my $line = <$data_src> ){ # on extrait "PORTE" dans $nature et la liste dans $list_string my( $nature, $list_string ) = ($line =~ m/^(\w+)\s+(.+)$/); # on découpe notre liste selon les virgules et on place ses éléments # dans le tableau @list my @list = split /,/, $list_string; # on itère sur les éléments de @list en les plaçant tour à tour dans $object for my $object ( @list ){ # on fait l'affichage tel que tu l'as indiqué print "$object $nature\n"; } } # on referme le fichier close $data_src; __END__
--
Jedaï
merci pr l'effort !
Partager