partie de liste

partie de liste - Perl - Programmation

Marsh Posté le 27-09-2007 à 14:42:56    

bonjour,
 
est-ce qu'il existe en perl un moyen simple d'obtenir la sous liste (b2 c3 d4) de la liste (a1 b2 c3 d4 e5) en spécifiant juste b et d par exemple ?
 
en awk c'est un truc du genre:  awk '/b/,/d/ {print $0}'  

Reply

Marsh Posté le 27-09-2007 à 14:42:56   

Reply

Marsh Posté le 27-09-2007 à 14:50:06    

pas exactement compris ce que tu voulais :)
tu veux récupérer uniquement les colonnes 2,3 et 4 de ton tableau?

Code :
  1. my @liste = ('a', 'b', 'c', 'd', 'e');
  2. my @b = @a[1..3];


ou alors tu veux récupérer uniquement les elements de ton tableau dont la valeur est comprise entre bX et dX?
A ce moment là regarde le post juste en dessous du tien et sers toi de map:
http://forum.hardware.fr/hfr/Progr [...] 8234_1.htm

Reply

Marsh Posté le 27-09-2007 à 15:14:45    

Le truc que tu donnes en awk ne fait pas du tout ce que tu expliques en français. Ton morceau de awk il affiche toutes les lignes d'entrée comprise entre la première ligne qui contient un b, et la première ligne suivante qui contient un d. Rien à voir avec des listes.
 
Pour les listes, anapajari a répondu. Pour l'équivalent de ton morceau de awk, en perl ça donne :

perl -ne '(/b/ .. /d/) && print'

Message cité 1 fois
Message édité par matafan le 27-09-2007 à 15:16:51
Reply

Marsh Posté le 27-09-2007 à 15:22:06    

anapajari a écrit :

pas exactement compris ce que tu voulais :)
tu veux récupérer uniquement les colonnes 2,3 et 4 de ton tableau?

Code :
  1. my @liste = ('a', 'b', 'c', 'd', 'e');
  2. my @b = @a[1..3];


ou alors tu veux récupérer uniquement les elements de ton tableau dont la valeur est comprise entre bX et dX?
A ce moment là regarde le post juste en dessous du tien et sers toi de map:
http://forum.hardware.fr/hfr/Progr [...] 8234_1.htm

merci pour ta réponse express  :)  
 
non en fait les premier et dernier élément de la sous liste contiennent un certain élément
 
par exemple avec la liste:
 
un deux
trois quatre
cinq six
sept huit
neuf dix
onze douze
 
je voudrais obtenir la partie de la liste contenue entre la ligne contenant "cinq" et la ligne contenant "dix", ce qui donne:
 
cinq six
sept huit
neuf dix
 
avec awk ça donnerait awk '/cinq/../dix/ {print $0}'
 
map ne me sert pas pour les éléments "entre" les 2 lignes
 
je voudrais y arriver sans faire de boucle...


Message édité par sidela le 27-09-2007 à 15:53:26
Reply

Marsh Posté le 27-09-2007 à 15:51:51    

matafan a écrit :

Le truc que tu donnes en awk ne fait pas du tout ce que tu expliques en français. Ton morceau de awk il affiche toutes les lignes d'entrée comprise entre la première ligne qui contient un b, et la première ligne suivante qui contient un d. Rien à voir avec des listes.
 
Pour les listes, anapajari a répondu. Pour l'équivalent de ton morceau de awk, en perl ça donne :

perl -ne '(/b/ .. /d/) && print'


tout à fait je m'a trompé  :jap:  
 
encore désolé, c'est bien /b/ .. /d/, etsinon vous auriez une solution ?   :whistle:


Message édité par sidela le 27-09-2007 à 15:52:28
Reply

Marsh Posté le 27-09-2007 à 16:13:21    

nan mais attends, en fait tu as pas une "liste" mais un fichier que tu lis c'est bien ça?
En fait je suis a peu près sur que tu as une liste uniquement parce que tu as bourriné un petit

Code :
  1. @lines = <FH>;


Et en fait tu veux le "morceau" de texte entre les deux mots, sous la forme d'un array par ligne non?
Je suis pas sur que tu prennes le problèmes par le bon bout, mais tu peux toujours faire un truc dans le genre:

Code :
  1. (join '#', @Liste ) =~ /(cinq.*?dix)/;
  2. my @sousListe = split /#/,$1;


Message cité 1 fois
Message édité par anapajari le 27-09-2007 à 16:14:07
Reply

Marsh Posté le 27-09-2007 à 16:24:34    

anapajari a écrit :

nan mais attends, en fait tu as pas une "liste" mais un fichier que tu lis c'est bien ça?
En fait je suis a peu près sur que tu as une liste uniquement parce que tu as bourriné un petit

Code :
  1. @lines = <FH>;


Et en fait tu veux le "morceau" de texte entre les deux mots, sous la forme d'un array par ligne non?
Je suis pas sur que tu prennes le problèmes par le bon bout, mais tu peux toujours faire un truc dans le genre:

Code :
  1. (join '#', @Liste ) =~ /(cinq.*?dix)/;
  2. my @sousListe = split /#/,$1;



OK ça marche  :jap:  
 
c le justement le cas d'une liste qui m'intéresse, pour un texte je sais qu'il y a plus simple.
je pensais qu'il y avait un équivalent aussi simple que la commande awk "/a/../b/" mais apparemment c pas le cas
 
encore merci !

Reply

Marsh Posté le 27-09-2007 à 18:53:18    

Ah ben dans ce cas, si, il y a plus simple :

my @sousListe = grep { (/cinq/ .. /dix/) } @liste;

Reply

Marsh Posté le 27-09-2007 à 19:52:51    

matafan a écrit :

Ah ben dans ce cas, si, il y a plus simple :

my @sousListe = grep { (/cinq/ .. /dix/) } @liste;


[:athome]

Spoiler :

je suis un [:geec]


Reply

Marsh Posté le 28-09-2007 à 09:29:21    

matafan a écrit :

Ah ben dans ce cas, si, il y a plus simple :

my @sousListe = grep { (/cinq/ .. /dix/) } @liste;



 :jap: j'ai trop pas le reflexe de me service de grep.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed