Probleme traitement de données - Perl - Programmation
Marsh Posté le 17-09-2006 à 21:27:21
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);
Marsh Posté le 17-09-2006 à 23:10:07
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>"; |
J'espère que cela répond à ta question, parce que j'ai la flemme de lire le code de ton premier post.
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
Marsh Posté le 18-09-2006 à 10:07:13
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
Marsh Posté le 18-09-2006 à 10:12:28
Je ne comprends pas bien ce que tu veux dire, par "afficher une autre page html" ?
Marsh Posté le 18-09-2006 à 11:24:14
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.
Marsh Posté le 18-09-2006 à 13:24:31
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().
Marsh Posté le 19-09-2006 à 12:40:33
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>
Marsh Posté le 19-09-2006 à 13:38:10
chewbaka2 a écrit : ok je reviens à la charge |
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`; |
chewbaka2 a écrit : print "<TABLE BORDER='1' align='center' bordercolor='#FFFFFF' bordercolorlight='#99FFFF' bgcolor='#FF6600'><TR><TH width=100' bgcolor='#FFFFFF'>@Title_col<\/TH>"; |
Normal. Tu lui dis "affiche <th machin> puis l'intégralité de mon tableau puis </th>". Ca ne marche pas bien.
Relis le snippet que j'ai posté plus haut.
Marsh Posté le 19-09-2006 à 15:47:18
Euh
je viens d'essayer et il m'affiche effectivement la ligne titre mais me met une balise <th></th> par lettre.
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
Marsh Posté le 19-09-2006 à 17:26:24
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
Marsh Posté le 17-09-2006 à 11:47:01
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