j'ai fichier du genre A nombre et je souhaite mettre les données dans un tableau
et 0 si A n'est pas présent
comme j'ai vu le précédent message sur le sujet j 'ai essayé d'adapter a mon cas ,mais ça ne marche pas
je débute sous perl et malgré la doc que j'ai lu cet aprés-midi je n'avance pas d'un pouce
deuxième question comment on lit le tableau
Forum Programmation.perl mettre les données d'un fichier dans un tableau
2
mai
2005
# Qui a chanté "comme un ouragan" ?
Posté par iznogoud . Évalué à 3.
Non sincèrement, je n'ai rien compris.
# Heu
Posté par pifou . Évalué à 3.
# Afficher la taille du tableau print scalar(@lines)."\n"; #parcours linéaire des lignes du tableau foreach $line (@lines) { # Enlever le retour chariot de fin de ligne chomp($line=$line); # On coupe la ligne en utilisant comme séparateur ':' # équivalent à : @result=split(":", $line);print @result[0]."\n"; ($user, $passwd, $uid, $gid, $desc, $home, $shell) = split(":", $line); print $user."\n"; }Je te conseille tout de même d'acheter un bouquin sur Perl (par exemple de chez O'Reilly http://www.oreilly.fr/perl.html(...) ) pour commencer et/ou de trouver un tutoriel sur Internet. Si tu bloques déjà sur des choses comme ça tu n'as pas fini de ne pas avancer d'un pouce :).[^] # Re: Heu
Posté par modr123 . Évalué à -1.
j'ai un fichier qui contient des données , pas un tableau
je souhaite mettre ses données dans un tableau
my @tableau = ();
open my $fh, "< /home/guy/lalalalala.txt" or die $@;
while (<$fh>)
if(/^(Cr[^,]*),$/) c'est ce truc que je comprends pas , je veux recuperer ce qu'il a apres Cr
[^] # Re: Heu
Posté par mac . Évalué à 2.
[^] # Re: Heu
Posté par pifou . Évalué à 4.
#!/usr/bin/perl # Faisons les choses bien, on va se forcer à bien déclarer nos variables use strict; # Initialisation du tableau my @array=(); # Fichier exemple my $file="/etc/passwd"; # Ouverture du fichier, stockage du descripteur dans la variable $fd open(my $fd, $file) or die "$file : $!"; # Parcour linéaire du fichier à l'aide du descripteur foreach my $line(<$fd>) { # Maintenant on a la ligne courante dans $line # On enleve le retour chariot de fin de ligne chomp($line); print $line."\n"; # Suivra le traitement pour récupérer les informations pertinentes à stocker dans le tableau #[[TRAITEMENT]] } # Fermeture du fichier close($fd)Il nous reste à faire le traitement des lignes de ton fichier, tu as souvent 2 cas qui se présentent :- Les données à récupérer sont séparées par des délimiteurs fixes (comme dans /etc/passwd le ':'), dans ce cas c'est assez facile de récupérer les données en utilisant la fonction split (qui renvoie un tableau):
- Les données sont assez exotiques, il faut alors souvent passer par les regexp (expressions rationelles/régulières). Dans le cas que tu cites, ça correspond bien au if(/.../). Prennons l'exemple (stupide) de /etc/password où l'on veut stocker dans @array les identifiants des utilisateurs utilisant bash :
Si tu ne connais pas les regexp un bouquin/tutiriel te sera surement utile.Si on reprends tout notre exemple avec l'utilisation des regexp, on aurait pu aussi réduire la taille du code en utilisant la variable magique ($_) :my @datas=split(":", $line); print $datas[0]."\n"# Si la ligne commence par tout sauf un ':' plusieurs fois (stockage dans $1) # puis suivit de n'importe quoi (.*) et finissant ($) par bash if($line=~/^([^:]+).*bash$/) { # On ajoute l'utilisateur en question ($1) dans le tableau @array push(@array, $1); }#!/usr/bin/perl # Faisons les choses bien, on va se forcer à bien déclarer nos variables use strict; # Initialisation du tableau my @array=(); # Fichier exemple à stocker dans le tableau my $file="/etc/passwd"; # Ouverture du fichier, stockage du descripteur dans la variable $fd open(my $fd, $file) or die "$file : $!"; # Parcour linéaire du fichier à l'aide du descripteur while (<$fd>) { # Maintenant on a la ligne courante dans $_ (variable magique) # On enleve le retour chariot de fin de ligne chomp; # Si la ligne ($_) commence par tout sauf un ':' plusieurs fois (stockage dans $1) # puis suivit de n'importe quoi (.*) et finissant ($) par bash if (/^([^:]+).*bash$/) { # On ajoute l'utilisateur en question ($1) dans le tableau @array push(@array, $1); } } # Affichage des utilisateurs de bash : print "Utilisateurs de bash : ".join(", ", @array)."\n"; # Fermeture du fichier close($fd)Avec ça tu devrais pouvoir avancer un petit peu, enfin je l'espère :).[^] # Re: Heu
Posté par iznogoud . Évalué à 2.
< open(my $fd, $file) or die "$file : $!";
> open(my $fd, "< $file") or die "$file : $!";
< chomp;
> chomp;
> #une ligne de /etc/passwd ressemble à :
> # titi:x:65534:65534:toto:/home/titi:/bin/sh
> # on va essayer de récupérer 'titi' mais uniquement si titi utilise bash comme shell...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.