Rechercher : dans
Par :

Help Perl

Dernière réponse le 17 sep 2008 à 08:45:13 clement., le 16 sep 2008 à 14:57:37 
 Signaler ce message aux modérateurs

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 ?

Configuration: Windows XP
Firefox 3.0.1

Meilleures réponses pour « Help Perl » dans :
Perl - Les fichiers Voir La notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...
Les variables avec Perl Voir Concept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois...
Perl - Caractéristiques du langage Voir Fichier source, et interprétation Le fichier source d'un programme écrit en Perl est un simple fichier texte dont l'extension est par convention .pl. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un fichier texte dans sa...
Perl - Introduction VoirHistoire de Perl Perl (Practical Extraction and Report Language) est un langage de programmation dérivé des scripts shell, créé en 1986 par Larry Wall afin de mettre au point un système de News entre deux réseaux. Il s'agit d'un langage interprété...
Perl - Entrée et sortie standards VoirQu'appelle-t-on entrée standard et sortie standard ? Perl permet d'écrire sur la sortie standard, appelée STDOUT et de lire sur l'entrée standard (STDIN). Il s'agit de deux descripteurs fournis par le système d'exploitation et permettant...

1

tisba972, le 16 sep 2008 à 15:35:37

Bonjour,

Qu'entend tu par trier le contenu?
peux tu mettre ce que tu as deja coder pour l'affichage?
Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

2

clement., le 16 sep 2008 à 16:16:17

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

Répondre à clement.

3

tisba972, le 16 sep 2008 à 16:31:04

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


Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

4

clement., le 16 sep 2008 à 16:44:50

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

Répondre à clement.

5

tisba972, le 16 sep 2008 à 16:53:20

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
Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

6

tisba972, le 16 sep 2008 à 17:00:09

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; 

Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

7

clement., le 16 sep 2008 à 17:02:06

D'accord mais c'est pas plutot avec des "my" pour les varaibles ?

Répondre à clement.

8

tisba972, le 16 sep 2008 à 17:04:00

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 :-) Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

9

clement., le 16 sep 2008 à 17:11:49

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.

Répondre à clement.

10

tisba972, le 16 sep 2008 à 17:19:43

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 . Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

11

clement., le 16 sep 2008 à 17:23:57

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

Répondre à clement.

12

tisba972, le 16 sep 2008 à 17:28:48

Tu as bien écris cett ligne là : #!/usr/bin/perl
sans faute? Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

13

lami20j, le 16 sep 2008 à 17:31:27

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

Répondre à lami20j

14

clement., le 16 sep 2008 à 17:31:39

#!/usr/bin/perl -w

moi j'ai écris ca,

Répondre à clement.

15

tisba972, le 16 sep 2008 à 17:33:03

Teste en virant le -w....
lami20j est calé en perl ...
je pense qu'il te filera un coup de main aussi Que l'on soit de l'ouest, de l'est, du nord, du sud ...On se retrouve souvent à l'ouest

Répondre à tisba972

16

clement., le 16 sep 2008 à 17:34:07

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

Répondre à clement.

17

clement., le 16 sep 2008 à 17:34:54

Merci en tout ca a toi tisba972,
lami20j va avoir du boulot avec moi lol^^

Répondre à clement.

18

lami20j, le 16 sep 2008 à 17:36:37

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

Répondre à lami20j

19

clement., le 16 sep 2008 à 17:39:23

Je n'aurais qu'un mot... heu...:)

qui fait quoi ? j'ai pas tout suivi... habituellement je comprends mais là c'est tout confus..

Répondre à clement.