Help Perl

Fermé
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 - 16 sept. 2008 à 14:57
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 - 17 sept. 2008 à 08:45
Bonjour,

Je voudrais afficher le contenu d'un fichier sous une page web en langage Perl.
Il ne s'agit pas d'afficher simplement et betement le contenu. ça j'y suis arrivé.
Mais de trier dans celui-ci...

est ce que quelqu'un pourrait m'aider ?

26 réponses

tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 15:35
Bonjour,

Qu'entend tu par trier le contenu?
peux tu mettre ce que tu as deja coder pour l'affichage?
-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 16:16
Pour lire mon ficher et l'afficher sur ma page web mon code est tout simple :

print "Content-type: text/html\n\n"; #Pour pouvoir être lu sur une page Web (HTML)

@ARGV = ("monfichier"); #Lire le fichier voulu

while (<>)
{
print;
}



le fichier en question c'est celui là !

lmstat - Copyright (C) 1989-2001 Globetrotter Software, Inc.
Flexible License Manager status on Fri 9/12/2008 11:26

License server status: 27000@serveur
License file(s) on chemin_serveur

nom_serveur: license server

Vendor daemon status (on serveur):

Version: UP v7.2

Feature usage info:

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 1 license available)

Users of ***: (Total of 1 license available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Donc ce contenu arrive dans ma page web mais pas de cette forme là ...
Ce que je veux c'est realisé un tableau ou sera mis en colonne :
- le nom de la licence (représenté par les ***)
- le nombre de licences disponibles

Lorsqu'un utilisateur utilise une de ses licences sa rajoute des informations qu'il faut stockés dans un second tableau :

- le login de la personne qui utilise cette licence( dans l'exemple il n'y a personne a ce moment)
- le nom de la machine
- la date de début d'utilisation.

voila... pour moi c'est vraiment pas simple....
merci de l'aide
-1
tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 16:31
donc
je pense que tu connais la commande "split" en perl (separateur de champ)
il faut que tu fasse un split sur chaque ligne.
#admettons que tu enregistre la ligne de ton fichier dans $ligne

@C_ligne = split " ",$ligne;   #ici tu récupère les champs de la ligne qui sont séparés par un espace 

#maintenant tu veux traiter les lignes où sont contenus les infos sur la licence.

for  $i (0..@C_ligne)
          if ( $C_ligne eq "Users")
          {
                      $nom_licence[$i] = $C_ligne[2];     #attention cela marche que si le nom de la licence est en seul mot
                      $nbr_licence[$i] = $C_ligne[6] ;   # j'ai un doute sur le numero 6 , c ptet 7
          }
}

#il faut que tu lise ton fichier ligne par ligne pour cela


-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 16:44
En effet je connais la commande split mais je savais pas trop comment l'utiliser.

Donc ca donne ça :



print "Content-type: text/html\n\n"; #Pour pouvoir être lu sur une page Web (HTML)

@ARGV = ("monfichier"); #Lire le fichier voulu

while (<>)
{
@C_ligne = split " ",$ligne;
for $i (0..@C_ligne)
if ( $C_ligne eq "Users")
{
$nom_licence[$i] = $C_ligne[2]; #Le nom des licences est bien en un seul mot (ex : une_licence )
$nbr_licence[$i] = $C_ligne[6] ; # là je comprends pas bien a quoi correspond le 6 ou 7 ? ca représente le 7eme ou 8eme mot de la ligne ?

print; # enfin le programme est t-il correcte ?
} }
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 16:53
dnas ton cas là le programme ne va reconnaitre la variable $ligne.
il faudrait faire

print "Content-type: text/html\n\n"; #Pour pouvoir être lu sur une page Web (HTML)

open (FIC,"<Ton_fichier");
while ($ligne = <FIC>)
{
           @C_ligne = split " ",$ligne;
            for $i (0..@C_ligne)
            {
                            if ( $C_ligne eq "Users")
                            {
                                     $nom_licence[$i] = $C_ligne[2]; #Le nom des licences est bien en un seul mot (ex : une_licence )
                                     $nbr_licence[$i] = $C_ligne[6] ; # le 6 indique le numero du champ que l'on veut récupérer en sachant que le premier champ est 0 , donc 6 correspond au 7e champ.
                           }
             }
}

print; 

après à toi de restrucutrer les données enregistrée pour savoir comment tu les réécris
-1
tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 17:00
je viens de constater une belle boulette dans mon "for"
je te demande de m'excuser d'ailleurs.
procede autrement.

print "Content-type: text/html\n\n"; #Pour pouvoir être lu sur une page Web (HTML)

$i = 0;
open (FIC,"<Ton_fichier");
while ($ligne = <FIC>)
{
           @C_ligne = split " ",$ligne;
           
            if ( $C_ligne eq "Users")
             {
                                     $nom_licence[$i] = $C_ligne[2]; #Le nom des licences est bien en un seul mot (ex : une_licence )
                                     $nbr_licence[$i] = $C_ligne[6] ; # le 6 indique le numero du champ que l'on veut récupérer en sachant que le premier champ est 0 , donc 6 correspond au 7e champ.
                                       $i += 1;
                }
             
}
#la c'est correct et moins encombrant
print; 

-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 17:02
d'accord mais c'est pas plutot avec des "my" pour les varaibles ?
-1
tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 17:04
ce n'est pas obligatoire , c'est selon l'utilisation que tu en fais.
tu peux mettre
my $i = 0;
si ça peut te soulager :-)
-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 17:11
Moi personnellement si ca a pas d'importance je m'en fiche lol
mais le petit malin m'indique plein plein d'erreurs ^^ dans le error.log

je mets juste les éléments concernés ;)
(Did you mean &i instead?)
Variable "$i" is not imported at /var/www/cgi-bin/script line 32.
(Did you mean &i instead?)
Variable "$i" is not imported at /var/www/cgi-bin/script line 33.,
(Did you mean &i instead?)
Variable "$i" is not imported at /var/www/cgi-bin/script line 34.
(Did you mean &i instead?)
Global symbol "$i" requires explicit package name at /var/www/cgi-bin/script line 24., Global symbol "$ligne" requires explicit package name at /var/www/cgi-bin/script line 26., Global symbol "@C_ligne" requires explicit package name at /var/www/cgi-bin/script line 28.
Global symbol "$ligne" requires explicit package name at /var/www/cgi-bin/script line 28., Global symbol "$C_ligne" requires explicit package name at /var/www/cgi-bin/script line 30
Global symbol "@nom_licence" requires explicit package name at /var/www/cgi-bin/script line 32
Global symbol "$i" requires explicit package name at /var/www/cgi-bin/scriptline 32., Global symbol "@C_ligne" requires explicit package name at /var/www/cgi-bin/script line 32
Global symbol "@nbr_licence" requires explicit package name at /var/www/cgi-bin/script line 33
Global symbol "$i" requires explicit package name at /var/www/cgi-bin/script line 33., Global symbol "@C_ligne" requires explicit package name at /var/www/cgi-bin/scriptline 33
Global symbol "$i" requires explicit package name at /var/www/cgi-bin/script line 34., : Execution of /var/www/cgi-bin/script aborted due to compilation errors.


Chouette pas vrai ^^ ? j'ai l'impression qu'il aime pas trop les nouvelles variables...
J'ai une autre question.. le open est-il nécessaire ? j'ai déjà essayé de l'utiliser et a chaque fois il me mets une erreur du style "readline () ..."
pas cette fois parce que ya le reste mais elle viendra apres je pense.
-1
tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 17:19
Alors là j'avoue....
essaie en déclarant toutes les variables que l'on utilise avec my .
en faisant attention de bien mettre @ pour les tabelaux .
-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 17:23
Je sens que mon Perl est complement à la masse....
j'arrive à rien faire avec ce truc là... a par afficher "coucou" ou un tableau mais sans rien a l'intérieur
et quand j'essaye de faire un rsh... c'est même pas ma peine d'y penser...
-1
tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 17:28
tu as bien écris cett ligne là : #!/usr/bin/perl
sans faute?
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 sept. 2008 à 17:31
Salut,
les informations que tu veux stocker dans le deuxième tableau se trouvent où?

- le login de la personne qui utilise cette licence( dans l'exemple il n'y a personne a ce moment)
- le nom de la machine
- la date de début d'utilisation.
-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 17:31
#!/usr/bin/perl -w

moi j'ai écris ca,
-1
tisba972 Messages postés 334 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 9 septembre 2011 44
16 sept. 2008 à 17:33
teste en virant le -w....
lami20j est calé en perl ...
je pense qu'il te filera un coup de main aussi
-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 17:34
Les autres éléments losqu'un utiliseur prends une licence se rajoutens dans ce meme fichier.

c'est a dire que ca donne ca a la fin j'ai pu trouver un exemple :

Users of ***: (Total of 2 licenses available)

"***" v12.01, vendor:
floating license

machine serveur /dev/tty (v1.0) (serveur/27000 202), start Tue 7/15 10:13

voila...
-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 17:34
merci en tout ca a toi tisba972,
lami20j va avoir du boulot avec moi lol^^
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 sept. 2008 à 17:36
Re,

par exemple (attention, ce n'est pas encore un script CGI) pour afficher les licences et le nombre de licences
Dans mon exemple j'utilise le handle DATA et pas un fichier. Mais ce n'est qu'un exemple ;-)
#!/usr/bin/perl
use strict;use warnings;

while (<DATA>){
  next unless /^Users/;
  print "$1 : $2 licence(s)\n" if /of\s*(.*):.*of\s*(\d+)\s+.*/;
}
__END__
lmstat - Copyright (C) 1989-2001 Globetrotter Software, Inc.
Flexible License Manager status on Fri 9/12/2008 11:26

License server status: 27000@serveur
License file(s) on chemin_serveur

nom_serveur: license server

Vendor daemon status (on serveur):

Version: UP v7.2

Feature usage info:

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 1 license available)

Users of ***: (Total of 1 license available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)

Users of ***: (Total of 2 licenses available)
lami20j@debian:~/trash$ perl licence.pl
*** : 2 licence(s)
*** : 2 licence(s)
*** : 2 licence(s)
*** : 2 licence(s)
*** : 1 licence(s)
*** : 1 licence(s)
*** : 2 licence(s)
*** : 2 licence(s)
*** : 2 licence(s)
*** : 2 licence(s)
*** : 2 licence(s)
-1
clement. Messages postés 289 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 3 septembre 2013 14
16 sept. 2008 à 17:39
je n'aurais qu'un mot... heu...:)

qui fait quoi ? j'ai pas tout suivi... habituellement je comprends mais là c'est tout confus..
-1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
16 sept. 2008 à 17:43
Re,

essayons de faire simple

Tu donnes le fichier que tu as en entrée et tu affiches exactement ce que tu veux obtenir.
En bref, un exemple concret. Le plus important c'est de comprendre ce que tu veux obtenir. Pour le reste on verra ;-)

clement regarde tes MP
-1