Problèmes tableaux

Problèmes tableaux - Perl - Programmation

Marsh Posté le 24-01-2013 à 17:51:22    

Bonjour,
 
J'ai commencé perl il y a peu et j'ai un soucis sur un programme que j'ai à faire :
 
J'ai 3 tableaux que j'ai crée via la commande open qui contient chacun 2 colonnes.
Ces tableaux sont le résultat de commande sql (select) d'une base de données
 

Citation :

tableau 1 :
colonne 1 : employee_id
colonne 2 : asset_tag
 
tableau 2 :
colonne 1 : employee_id
colonne 2 : location_id
 
tableau 3 :
colonne 1 : location_id
colonne 2 : location_code


 
La colonne 1 du tableau 1 est equivalente à la colonne 1 du tableau 2 et la colonne 2 du tableau 2 est équivalente à la colonne 1 du tableau 3.
Donc suivant ces liaisons, je dois lister les tableaux afin d'avoir pour chaque employee_id (de la colonne 1 du tableau 1) son location_code.
 
Puis une fois que j'ai, pour chaque employee_id, sonc location_code je dois transferer la colonne asset_tag et le location_code correspondant.
Je pensais effectuer une boucle mais malheureusement je ne vois pas comment faire, si quelqu'un a une idée je suis preneur.
 
Merci

Reply

Marsh Posté le 24-01-2013 à 17:51:22   

Reply

Marsh Posté le 24-01-2013 à 19:06:45    

:hello:

Citation :

je dois transferer la colonne asset_tag et le location_code correspondant.

Faudrais expliquer un peu plus en détail ce que vous voulez obtenir, parce que "transférer" c'est vague.
A+,


Message édité par gilou le 24-01-2013 à 19:06:53

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

Marsh Posté le 25-01-2013 à 09:48:21    

Oui c'est vrai après re-lecture que cela est vague  :)  
 
Voici une nouvelle explication de ce que je souhaite (à froid lol), plus claire je l'espère, car c'est vrai que je n'etais pas très clair sur ce que je voulais :
 
J'ai, donc, 3 tableaux (que j'ai crée):

Citation :


tab1
employee_id    asset_tag
user1              ordiA
user2              ordiB
user3              ordiC
 
tab2
employee_id    location_id
user1              loc1
user2              loc2
user3              loc3
 
tab3
location_id    location_code
loc1              Paris
loc2              Lyon
loc3              Marseille


 
Je voudrai donc faire une boucle permettant de lire ces tableaux et d'envoyer mon résultat dans un fichier csv (avec 1 colonne location_code et l'autre colonne asset_tag) pour avoir le résultat suivant :

Citation :


fichier_csv:
location_code    asset_tag
Paris                 ordiA
Lyon                 ordiB
Marseille           ordiC


 
Donc, pour chaque employee_id du tab1 je dois recuperer son location_id du tab2 pour avoir le location_code du tab3 et lier dans un fichier csv le location_code avec les asset_tag (afin d'avoir la localisation du matériel en rapport à la localisation de son utilisateur).
 
J'espère que mes explications sont plus clair.
 
Merci.

Reply

Marsh Posté le 25-01-2013 à 12:16:46    

A toi d'adapter ce genre de chose:

Code :
  1. #!/usr/bin/perl
  2. use v5.10.1;
  3. # code propre
  4. use strict;
  5. use warnings;
  6. use autodie;
  7.  
  8. use Data::Dumper; #utile uniquement pour la mise au point
  9.  
  10. my ($input1, $input2, $input3) = ('herisstab1.txt', 'herisstab2.txt', 'herisstab3.txt');
  11. my ($fh);
  12. my (%loc, %info);
  13.  
  14. open $fh, "< $input3";
  15. while (<$fh> ) {
  16.  next if $. == 1; # On saute la ligne de titre
  17.  if (/^(\S+)\s+(\S+)\s*$/) {
  18.    $loc{$1} = $2;
  19.  }
  20. }
  21. close($fh);
  22.  
  23. open $fh, "< $input1";
  24. while (<$fh> ) {
  25.  next if $. == 1; # On saute la ligne de titre
  26.  if (/^(\S+)\s+(\S+)\s*$/) {
  27.    $info{$1}{'ordi'} = $2;
  28.  }
  29. }
  30. close($fh);
  31.  
  32. open $fh, "< $input2";
  33. while (<$fh> ) {
  34.  next if $. == 1; # On saute la ligne de titre
  35.  if (/^(\S+)\s+(\S+)\s*$/) {
  36.    if (defined $info{$1}) {
  37.      if (defined $loc{$2}) {
  38.        $info{$1}{'location'} = $loc{$2};
  39.      }
  40.    }
  41.  }
  42. }
  43. close($fh);
  44.  
  45. # a partir d'ici, tout est dans %info
  46. # faire print Dumper(%info); pour en voir le contenu
  47. # a toi de l'exploiter comme cela te convient
  48. # un exemple possible:
  49.  
  50.  
  51. my @result;
  52. push @result, "location_code\tasset_tag\n";
  53. foreach (sort(keys %info)) {
  54.  my $line =  $info{$_}{'location'}."\t".$info{$_}{'ordi'}."\n";
  55.  push @result, $line;
  56. }
  57. # @result = sort(@result); # si tu veux trier par ville, auquel cas le foreach (sort(keys %info)) peut être remplacé par un simple foreach (keys %info)
  58. print @result;


Sur tes 3 fichiers nommés herisstab1.txt, herisstab2.txt, herisstab3.txt, j'obtiens en sortie:

location_code   asset_tag
Paris   ordiA
Lyon    ordiB
Marseille       ordiC


 
A+,


Message édité par gilou le 25-01-2013 à 12:20:15

---------------
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