Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1707 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Probleme traitement de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme traitement de données

n°1443563
chewbaka2
Posté le 17-09-2006 à 11:47:01  profilanswer
 

Bonjour,
 
je suis nouveau de le forum et aussi dans le monde perl,et j'ai besoin de traiter le resultat d'une commande (c'est une commande Tivoli pour generer des inventaires srv) pour les mettres en formes dans un tableau .
 
 
voici le type de données que me renvoi le srv :
 
Query Name: WEB_NATIV_SWARE_QUERY   ==> nom de la query executée (cette ligne doit etre supprimée dans l'affichage)TME_OBJECT_LABEL|PACKAGE_NAME|PACKAGE_VERS ==> Ligne comportant le nom des colonnes
itiva_ep|Batch Operations|4.3.3.78 ==> ligne inventaire pour une machine                            
psta|Netscape Communicator Help - U.S. English|4.7.5.0==> ligne inventaire pour une autre machine
 
la colonne TME_OBJECT represente le nom du serveur inventorié et doit etre affiche en haut de chaque tableau (un tableau par machine)
mais ne doit pas apparaitre à l'interieur de ce meme tableau .
 
Mais la partie importante à savoir est que en fonction de l'inventaire le nombre de colonnes peu changer.
 
ci -joint la partie d'une page cgi qui genere en html un tableau (mais avec des colonnes fixes)
 
#!/usr/bin/perl
#
##################################################################################
#
# OUTIL D'INVENTAIRE WEB Tivoli Inventory
#
# Laurent  04/09/2006
#
##################################################################################
 
##########
#   VAR  #
##########
 
if ($ENV{REQUEST_METHOD} eq "GET" ) {
 $InputArgs = $ENV{QUERY_STRING};
 
    } else {
 $CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'};
 read(STDIN, $InputArgs, $CONTENT_LENGTH);
    }
 
$Task="";
$Host="";
$TaskOption="";
$page_inv="/usr/local/Tivoli/HTTPTiv/AdminPo/admin-cgi/inventory.html";
$queryLib=`. /etc/Tivoli/setup_env.sh ;  wls \@QueryLibrary:itiva.Inventory_Query_ql`;
@QueryLib=split(/\n/,$queryLib);
$aix_system=`. /etc/Tivoli/setup_env.sh ; wlsendpts \@ProfileManager:itiva.INV.aix4-r1-Hardware_scan_pm | awk {'print \$1'}`;
@Aix_system=split(/\n/,$aix_system);
$linux_system=`. /etc/Tivoli/setup_env.sh ; wlsendpts \@ProfileManager:itiva.INV.linux-ix86-Hardware_scan_pm | awk {'print \$1'}`;
@Linux_system=split(/\n/,$linux_system);
$win_system=`. /etc/Tivoli/setup_env.sh ; wlsendpts \@ProfileManager:itiva.INV.w32-ix86-Hardware_scan_pm | awk {'print \$1'}`;
@Win_system=split(/\n/,$win_system);
 
 
##########
#  SUB   #
##########
 
sub RecupArgs {
 @Args=split(/&/,$InputArgs);
 foreach $_ (@Args) {
  $arg=$_;
  #print "ARG : $arg\n";
  if ( $arg =~ /HOST=/ ) {
   $arg =~ s/HOST=//;
   $Host=$arg;
  } elsif ( $arg =~ /QUERY=/ ) {
   $arg =~ s/QUERY=//;
   $Query=$arg;
  } elsif ( $arg =~ /QueryType=/ ) {
   $arg =~ s/QueryType=//;
   $QueryOption=$arg;
  }
 }
}
 
 
sub InvHome {
 open(FH_PAGE_INV,"<$page_inv" );
  while (<FH_PAGE_INV> ) {
   $ligne=$_;
   if ( $ligne =~ /ENDPOINT/ ) {
    print "<OPTION> ## AIX ##";
    foreach $_ (@Aix_system) {
                                 $opt=$_;
                                 print "<OPTION> $opt\n";
                         }
                         print "<OPTION> ## LINUX ##";
    foreach $_ (@Linux_system) {
                                 $opt=$_;
                                 print "<OPTION> $opt\n";
                         }
                         print "<OPTION> ## WINDOWS ##";
    foreach $_ (@Win_system) {
                                 $opt=$_;
                                 print "<OPTION> $opt\n";
                         }
   } elsif ( $ligne =~ /QUERY_TYPE/ ) {
    foreach $_ (@QueryLib) {
                                 $opt=$_;
                                 print "<OPTION> $opt\n";
                         }
                  }else {
    print "$ligne\n";
   }
  }
 close(FH_PAGE_INV);
}
 
 
 
sub RunQuery {
 #$query_host=`. /etc/Tivoli/setup_env.sh ; wqueryinv -n -d \"|\" -q \@$Query $Host `;
 $query_host=`. /etc/Tivoli/setup_env.sh ; wqueryinv  -d \"|\" -q \@$Query $Host `;
 @Query_host=split(/\n/,$query_host);
 $title=@Query_host[1];
  @TITLE= split(/\n/, $title);
  shift @inv;
  $Entete= shift @inv;
  print "$Entete\n";
  SPLIT: foreach $ligne (@inv) {
        print "$ligne\n";
  }
 print "<H1 align='center'> Serveur : $Host </H1>";
 
  #print "<TABLE BORDER='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR><TH width=404' bgcolor='#FFFFFF'>PRODUIT<\/TH><TH div align='center' bgcolor='#FFFFFF'>VERSION<\/TH><\/TR>";
 print "<TABLE BORDER='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR><TH width=404' bgcolor='#FFFFFF'>PRODUIT<\/TH><TH div align='center' bgcolor='#FFFFFF'>VERSION<\/TH><\/TR>";
 foreach $_ (@Query_host) {
  $ligne=$_;
  @Ligne=split(/\|/,$ligne);
  $Ep=shift(@Ligne);
  $Product=shift(@Ligne);
  $Version=shift(@Ligne);
  print "<TR><TD>$Product<\/TD><TD align='center'>$Version<\/TD><\/TR>";
 }
 
 print "<\/TABLE>";
}
 
 
 
 
 
##########
#  MAIN  #
##########
print "Content-Type: text/html\n\n";
 
# RECUPERATION DES ARGUMENT DE LA PAGE WEB
&RecupArgs;
 
# AFFICHAGE DES INDICATEURS
if ( $QueryOption =~ /RunQuery/ ) {
 &RunQuery;
} else {
 &InvHome;
}
 
merci


Message édité par chewbaka2 le 17-09-2006 à 12:08:54
mood
Publicité
Posté le 17-09-2006 à 11:47:01  profilanswer
 

n°1443727
Elmoricq
Modérateur
Posté le 17-09-2006 à 20:03:00  profilanswer
 

Et la question est ? [:petrus dei]

n°1443774
chewbaka2
Posté le 17-09-2006 à 21:27:21  profilanswer
 

En fait le but est de generer un tableau dont le colonnes seront differente en fonction des données traitées .
Donc il faut que je cree une page cgi qui puisse traiter celles-ci et les afficher dans une page web .
Non pas comme dans mon exemple qui lui les traitent en dur;
 
 print "<TABLE BORDER='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR><TH width=404' bgcolor='#FFFFFF'>PRODUIT<\/TH><TH div align='center' bgcolor='#FFFFFF'>VERSION<\/TH><\/TR>";  
 foreach $_ (@Query_host) {  
  $ligne=$_;  
  @Ligne=split(/\|/,$ligne);  
  $Ep=shift(@Ligne);  
  $Product=shift(@Ligne);  
  $Version=shift(@Ligne);


Message édité par chewbaka2 le 17-09-2006 à 21:39:37
n°1443806
Elmoricq
Modérateur
Posté le 17-09-2006 à 23:10:07  profilanswer
 

Il te suffit d'écrire une boucle qui parcourt les données de ton tableau, pour l'afficher.
 
Exemple simple, admettons qu'il y ait "PRODUIT|VERSION" dans $ligne :

print "<table border='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR>";
 
foreach my $champ ( split /|/, $ligne )
{
   chomp($champ);
   printf "<th bgcolor='#FFFFFF'>$champ</th>";
}
printf "</tr>";


 
J'espère que cela répond à ta question, parce que j'ai la flemme de lire le code de ton premier post. :o
 
 
edit : au fait, je te suggère l'utilisation du module CGI pour simplifier l'écriture de tes scripts
http://search.cpan.org/~lds/CGI.pm-3.23/CGI.pm


Message édité par Elmoricq le 17-09-2006 à 23:11:29
n°1443918
chewbaka2
Posté le 18-09-2006 à 10:07:13  profilanswer
 

Merci  
 
dans un autre registre il y a-t-il un moyen d'afficher une autre page html avec le resultat depuis une page cgi
 
laurent

n°1443921
Elmoricq
Modérateur
Posté le 18-09-2006 à 10:12:28  profilanswer
 

Je ne comprends pas bien ce que tu veux dire, par "afficher une autre page html" ? :??:

n°1443984
chewbaka2
Posté le 18-09-2006 à 11:24:14  profilanswer
 

Elmoricq a écrit :

Je ne comprends pas bien ce que tu veux dire, par "afficher une autre page html" ? :??:


 
en fait je t'explique:  
 
le mecanisme de ma page cgi :
 
j'execute une commande qui creer par ex un fichier toto.txt.
ensuiste je dois executer (tjrs dans page cgi ) un script java qui va traiter le fichier toto.txt et le mettre au format html  
et pour finir je voudra que ma page cgi fasse  afficher cette page directement.

n°1444060
Elmoricq
Modérateur
Posté le 18-09-2006 à 13:24:31  profilanswer
 

Eh bien le plus simple est d'ouvrir le fichier HTML généré, et d'en afficher le contenu sur la sortie standard.
 
Regarde du côté de open() et de printf().


Message édité par Elmoricq le 18-09-2006 à 13:24:47
n°1444576
chewbaka2
Posté le 19-09-2006 à 12:40:33  profilanswer
 

ok je reviens à la charge  
 
j'ai reussi à extraire la ligne titre pour les colonnes.
et comptabiliser le nombres de champs  
 
 
  $query_host=`. /etc/Tivoli/setup_env.sh ; wqueryinv  -d \"|\" -q \@$Query $Host `;
 @Query_host=split(/\n/,$query_host);
       shift @Query_host;
       $title=@Query_host[0];
       
        foreach $_ ($title) {
        $title_col=$_ ;
        @Title_col=split (/\|/,$title_col);
        shift @Title_col;
                 
  }
la il me met bien de cote la colonne titre  
 
 print "<TABLE BORDER='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR><TH width=100' bgcolor='#FFFFFF'>@Title_col<\/TH>";  
 
ici je lui demande d'afficher dans un tableau Title_col ce qu'il fait.Le bug est qu'il affiche tout dans une seule col .
comment faire pour qu'il affiche dynamiquement chaque col dans une balise <th></th>  
   

n°1444597
Elmoricq
Modérateur
Posté le 19-09-2006 à 13:38:10  profilanswer
 

chewbaka2 a écrit :

ok je reviens à la charge  
 
j'ai reussi à extraire la ligne titre pour les colonnes.
et comptabiliser le nombres de champs  
 
 
  $query_host=`. /etc/Tivoli/setup_env.sh ; wqueryinv  -d \"|\" -q \@$Query $Host `;
 @Query_host=split(/\n/,$query_host);
       shift @Query_host;
       $title=@Query_host[0];
       
        foreach $_ ($title) {
        $title_col=$_ ;
        @Title_col=split (/\|/,$title_col);
        shift @Title_col;
                 
  }
la il me met bien de cote la colonne titre


 
C'est néanmoins alambiqué, je ne comprends pourquoi tu effectues tous ces détours. :/
 
Il suffisait d'écrire :

my $wqueryinv = `. /etc/Tivoli/setup_env.sh ; wqueryinv  -d \"|\" -q \@$Query $Host`;
my @Query_host = split /\n/, $wqueryinv;
 
foreach my $title ( split /|/, @Query_host[1] )
{
   chomp($title);
   printf "<th>$title</th>";
}


 
 

chewbaka2 a écrit :

print "<TABLE BORDER='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR><TH width=100' bgcolor='#FFFFFF'>@Title_col<\/TH>";  
 
ici je lui demande d'afficher dans un tableau Title_col ce qu'il fait.Le bug est qu'il affiche tout dans une seule col .
comment faire pour qu'il affiche dynamiquement chaque col dans une balise <th></th>


 
Normal. Tu lui dis "affiche <th machin> puis l'intégralité de mon tableau puis </th>". Ca  ne marche pas bien. :o
Relis le snippet que j'ai posté plus haut. [:spamafote]


Message édité par Elmoricq le 19-09-2006 à 13:41:29
mood
Publicité
Posté le 19-09-2006 à 13:38:10  profilanswer
 

n°1444689
chewbaka2
Posté le 19-09-2006 à 15:47:18  profilanswer
 

Euh  
 
je viens d'essayer et il m'affiche effectivement la ligne titre mais me met une balise <th></th> par lettre. :pt1cable:  
 
as tu une methode pour lui dire que tel donnée est associé à tel colonne .
 
Dois faire le considerer comme un tableau associatif ou pas .
Franchement je suis un peu largué.
 
désolé si j'ai un peu de mal mais je debute alors je comprends plus lentement.
 
merci  

n°1444784
chewbaka2
Posté le 19-09-2006 à 17:26:24  profilanswer
 

En fait voici ce a quoi je voudrai arriver (je l'ai fait en dur sur le code mais je voudrai afficher uniquement le nombre de colonnes presentes  dans le resultat de ma commande).
Dans l'ex j'en ai mis 9 mais il peut en avoir plus ou moins .
Donc comment faire pour que mon script calcule et affiche automatiquement le nombre de colonne à l'arrivée,car pour le moment il affiche le 9 colonnes (normal).

 
  $query_host=`. /etc/Tivoli/setup_env.sh ; wqueryinv  -d \"|\" -q \@$Query $Host `;
 @Query_host=split(/\n/,$query_host);
       shift @Query_host;
       $title=@Query_host[0];
       #SPLIT: foreach $ligne (@Query_host) {
            #print "$ligne\n";
 
        foreach $_ ($title) {
        $title_col=$_ ;
        @Title_col=split (/\|/,$title_col);
        shift @Title_col;
        $taille = scalar (@Title_col);
        $title1=shift (@Title_col);
        $title2=shift (@Title_col);
        $title3=shift (@Title_col);
        $title4=shift (@Title_col);
        $title5=shift (@Title_col);
        $title6=shift (@Title_col);
        $title7=shift (@Title_col);
        $title8=shift (@Title_col);
        $title9=shift (@Title_col);
         
  }
  print "<H1 align='center'> Serveur : $Host </H1>";
  print "<TABLE BORDER='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR><TH width=100' bgcolor='#FFFFFF'>$title1<\/TH><TH width=100' bgcolor='#FFFFFF'>$title2<\/TH><TH width=100' bgcolor='#FFFFFF'>$title3<\/TH><TH width=100' bgcolor='#FFFFFF'>$title4<\/TH><TH width=100' bgcolor='#FFFFFF'>$title5<\/TH><TH width=100' bgcolor='#FFFFFF'>$title6<\/TH><TH width=100' bgcolor='#FFFFFF'>$title7<\/TH><TH width=100' bgcolor='#FFFFFF'>$title8<\/TH><TH width=100' bgcolor='#FFFFFF'>$title9<\/TH>";  
 
   
 
    foreach $_ (@Query_host) {
  $ligne=$_;
    @Ligne=split(/\|/,$ligne);
  $Ep=shift(@Ligne);
    $lign1=shift(@Ligne);
  $lign2=shift(@Ligne);
  $lign3=shift(@Ligne);
  $lign4=shift(@Ligne);
  $lign5=shift(@Ligne);
  $lign6=shift(@Ligne);
  $lign7=shift(@Ligne);
  $lign8=shift(@Ligne);
  $lign9=shift(@Ligne);
   
print "<TR><TD>$lign1<\/TD><TD align='center'>$lign2<\/TD><TD align='center'>$lign3<\/TD><TD align='center'>$lign4<\/TD><TD align='center'>$lign5<\/TD><TD align='center'>$lign6<\/TD><TD align='center'>$lign7<\/TD><TD align='center'>$lign8<\/TD><TD align='center'>$lign9<\/TD><\/TR>";
 }
   
 
 
 print "<\/TABLE>";

 
encore merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Probleme traitement de données

 

Sujets relatifs
[MING] Problème de rotation d'un objet ( + police TTF > FDB)Visual C++ : Problème d'éxécution
problème de navigationProbleme avec mon forum PhpBB
Problème d'affichage inline !!!Problème de lien avec une liste déroulante
Probléme de frameProblème ligne de base CSS -> IE et Firefox différents ...
Problème pour compter dans champ sqlProbleme de boucle en perl
Plus de sujets relatifs à : Probleme traitement de données


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR