[PERL] Mixer un tableau

Mixer un tableau [PERL] - Perl - Programmation

Marsh Posté le 26-07-2012 à 12:16:36    

Bonjour,
J'ai un petit problème avec un tableau(liste). Je dois mixer les entrées entre elles. Voici le tableau à l'origine  
entre 0 ="FOO","1"
entre 1 ="FOO","2"
entre 2 ="FOO","3"
entre 3 ="FOO","4"
entre 4 ="FOO","5"
entre 5 ="BAR","a"
entre 6 ="BAR","b"
entre 7 ="BAR","c"
entre 8 ="BAR","d"
entre 9 ="BAR","e"
 
Le but de jeu c'est l'entrée 0 de ce tableau = l'entrée 0 + entre 5  ... puis l'entrée 1 + entre 6  et ainsi de suite jusqu'a l'entrée 4 puis l'entrée 5 qui devra prendre les valeur de l'entree 5 + entre 0 ...  
Au final j'essaye d'obtenir ceci  
 
entre 0 ="FOO","1","BAR","a"
entre 1 ="FOO","2","BAR","b"
entre 2 ="FOO","3","BAR","c"
entre 3 ="FOO","4","BAR","d"
entre 4 ="FOO","5","BAR","e"
entre 5 ="BAR","a","FOO","1"
entre 6 ="BAR","b","FOO","2"
entre 7 ="BAR","c","FOO","3"
entre 8 ="BAR","d","FOO","4"
entre 9 ="BAR","e","FOO","5"
 
J'ai essayé plein de chose, le meilleur résultat que j'ai obtenu c'est que les 5 premières entrées étaient correct après j'avais des résultats vraiment étrange.
Si quelqu'un à déjà eu cela à faire et qu'il a une solution, je suis preneur.
Merci pour votre aide
Grulles
 

Reply

Marsh Posté le 26-07-2012 à 12:16:36   

Reply

Marsh Posté le 26-07-2012 à 14:17:02    

Si j'ai bien compris, tu as au départ un tableau perl, dont chacune des entrées est un tableau à deux éléments?
Alors ceci devrait le faire:

Code :
  1. my $i = 0;
  2. my $middle = int($#a/2 +1);
  3. my @tmp;
  4. do {
  5.  @tmp = @{$a[$i]};
  6.  push $a[$i], @{$a[$middle + $i]};
  7.  push $a[$middle + $i], @tmp;
  8. } while (++$i < $middle);


ou @a est ton tableau initial
 
A+,


Message édité par gilou le 26-07-2012 à 14:50:45

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 26-07-2012 à 14:36:44    

Salut Gilou,
Décidément c'est toi le champion du PERL ici :-)
@a est juste un tableau pas un hash. 1 seule entrée par ligne.  
Voila comment je peuple le tableau @a via un autre tableau @Untableau en ne conservant que les entrées qui contiennent un certain pattern (ici "PATTERN" )
foreach (@Untableau){
 if ($_ =~ /"PATTERN"/) {
   @temp= split(/,/,$_);
   $a[$i]=$temp[0].",".$temp[2];
   chomp($a[$i]);
   print $a[$i]."\n";
   $i++;
  }
}
Merci encore pour ta réponse.

Reply

Marsh Posté le 26-07-2012 à 15:15:56    

Si tu n'as qu'un tableau contenant du texte, alors c'est simple:

Code :
  1. my $i = 0;
  2. my $middle = int($#a/2 +1);
  3. my $tmp;
  4. do {
  5.  $tmp = $a[$i];
  6.  $a[$i] .= "," . $a[$middle + $i];
  7.  $a[$middle + $i] .= "," . $tmp;
  8. } while (++$i < $middle);


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 26-07-2012 à 15:26:40    

Gilou,
Merci c'est exactement le résultat que je voulais obtenir.
Donc si j'ai bien compris pour le premier bout de code que tu m'as fournis c'est pour les hash?  

Reply

Marsh Posté le 26-07-2012 à 18:17:24    

Le premier bout de code, c'est pour un tableau dont chaque ligne est un tableau avec deux champs.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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