Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SOS]: Traduire un script pour quelqu'un qui ne comprend rien au Perl

7 réponses
Avatar
DL
Bonjour à tous,

J'ai hérité d'une tache consistant à traduire en WSH/VBS une 20aine de
scripts Perl. Sur cette 20aine, il m'en reste 2 pour lesquelles je ne
comprends pas ce que fait le traitement Pourriez vous m'aider à les traduire
?

1er script:
#!perl
# Shell permettant de comparer une date à "now"
# Retour : 0 si date > now, 1 sinon
# Nb : Date est recuperee par paramètres <------------------ C'est quoi
"Date" ?. Je ne comprends pas d'ou vient la "Date" qui doit être comparée à
Now. "Récupérée par paramètres": ca signifie quoi ici ??
# et doit etre au format YYMMDD hhnnss

$Decalage=0;

$i=1;
foreach $param (@ARGV) <------- Le tableau @ARGV est rempli par $param mais
d'ou sortent les valeurs que prend $param ??? Pour moi, à ce moment du
script, le tableau est vide non ???
{
if ($i==1) <------ Si la variable i prend la valeur string "1" alors
blablabla ... c'est ca ?
{
$DateDeb=$param; <------------------------------- Il y a donc une
itération sur les valeurs de type date ($param) contenues ds le tableau mais
de quoi et comment est rempli ce tableau ??? Quelle est la valeur de $param
???
}
if ($i==2) <------ Si la variable i prend la valeur string "2" alors
blablabla ... c'est ca ?
{
$DateDeb=$DateDeb." ".$param;
}
$i=$i+1;
}

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time+$Decala
ge);

$DateFin=sprintf "%04d%02d%02d
%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec; <------------- Je
suppose que c'est une date au format YYYYMMJJhhmmss du style 20040722231045
(c'est à dire, la date du jour)

if ($DateDeb gt $DateFin)
{
exit 0;
}
else
{
exit 1;
}

Je ne comprend pas ce que fait ce script et comment il le fait. A la limite
si un algo peut être établi en 2 coups de cuillère à pot, je suis preneur
.....

2eme script:
#!perl
#Shell permettant de donner la date en variable d'environnement <----- La
"date" du jour en variable d'environnement systeme NT/2000 ??

$Decalage=86400;

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time-$Decala
ge); <------------------ une idée du pourquoi le développeur retire 86400 s
de la date systeme ??
$Date=sprintf"%02d%02d%02d",$year-100,$mon+1,$mday; <------- Quelle valeur
prend la variable $Date (par comparaison avec le script ci dessus ou on a un
$year+100 (2000 ?) ici on a un $year-100 (1900 ?) ? Que fait le développeur
ici ?
chdir "e:/polisoft/batch/";
$commande="Translog.bat".$Date;
system($commande);


Donc le script passe en argument du batch Translog.bat une Date mais quelle
date ?????




Désolé de vous avoir importuné avec ces questions de "Newbie" mais mon
ignorance en Perl est criante !
Merci à tous

Dom

7 réponses

Avatar
LaFleche
Bonjour à tous,
bonjour


J'ai hérité d'une tache consistant à traduire en WSH/VBS une 20aine de
scripts Perl. Sur cette 20aine, il m'en reste 2 pour lesquelles je ne
comprends pas ce que fait le traitement Pourriez vous m'aider à les traduire
?

1er script:
#!perl
# Shell permettant de comparer une date à "now"
# Retour : 0 si date > now, 1 sinon
# Nb : Date est recuperee par paramètres <------------------ C'est quoi
"Date" ?. Je ne comprends pas d'ou vient la "Date" qui doit être comparée à
Now. "Récupérée par paramètres": ca signifie quoi ici ??
# et doit etre au format YYMMDD hhnnss


Je suis novice en perl mais ici c'est pas bien compliqué.
Je trouve d'ailleur les commentaires suffisamment explicites mais je
suppose que tu débute en programmation (sinon c'est inquiétant).

Pour fonctionner le script doit etre appelé avec une date passée en
paramètre donc de cette facon : "nomduscript.pl 970504 221514" par exemple.


$Decalage=0;

$i=1;
foreach $param (@ARGV) <------- Le tableau @ARGV est rempli par $param mais
d'ou sortent les valeurs que prend $param ??? Pour moi, à ce moment du
script, le tableau est vide non ???


Ce tableau contient les arguments passés au script (une simple recherche
sur goole te l'aurai appris mais passons).

{
if ($i==1) <------ Si la variable i prend la valeur string "1" alors
blablabla ... c'est ca ?


Oui, $i sert lui sert de compteur.

{
$DateDeb=$param; <------------------------------- Il y a donc une
itération sur les valeurs de type date ($param) contenues ds le tableau mais
de quoi et comment est rempli ce tableau ??? Quelle est la valeur de $param
???


le foreach est une boucle (comme un for) mais en plus pratique, à chaque
tour de boucle sur @ARGV la variable $param prend la valeur de la case
courante du tableau ($ARGV[0] au premier tour $ARGV[1] au second ...).

}
if ($i==2) <------ Si la variable i prend la valeur string "2" alors
blablabla ... c'est ca ?


Oui, il utilise donc son compteur $i pour savoir si $param correspond au
premier ou au deuxième argument et faire sa tambouille sur chacun
d'entre eux.

{
$DateDeb=$DateDeb." ".$param;
}
$i=$i+1;
}

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time+$Decala
ge);

$DateFin=sprintf "%04d%02d%02d
%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec; <------------- Je
suppose que c'est une date au format YYYYMMJJhhmmss du style 20040722231045
(c'est à dire, la date du jour)


Oui.

if ($DateDeb gt $DateFin)


Le 'gt' signifie 'greater' c.a.d 'plus grand que', c'est ici q'il va
comparer la date actuelle avec la date passée en argument.

{
exit 0;
}
else
{
exit 1;
}

Je ne comprend pas ce que fait ce script et comment il le fait. A la limite
si un algo peut être établi en 2 coups de cuillère à pot, je suis preneur
.....


Pour le deuxième script c'est en gros le même topo.

J'espère t'avoir un peu éclairci ce script.

Maintenant je laisse parler les experts s'ils ont pas trop la flemme de
te répondre.

Avatar
DominiX
ici même:40fee17a$0$4219$,
DL a écrit
... [tonne de scrappe]

illisible,
donne le script tel quel, ici on parle Perl !

-- dominix
Avatar
leconte.jerome1
Bonjour à tous,

J'ai hérité d'une tache consistant à traduire en WSH/VBS une 20aine de
scripts Perl. Sur cette 20aine, il m'en reste 2 pour lesquelles je ne
comprends pas ce que fait le traitement Pourriez vous m'aider à les traduire
?
[couiiic]


'lut
D'abord ... quelle est cette idee saugrenue de vouloir reinventer
la roue ???

Quel interet de passer de Perl a WSH/VBS ... ???

Ne serait t il pas plus simple de continuer a utiliser perl ... vu les
problemes genere par VBS et WSH ... qui ne sont jamais corrige ou alors
au benefice de nouveaux trou de securite ... ???


V+ jeje

Avatar
DL
Merci aux intervenants et surtout à LaFleche. Fort de tes infos, j'ai pû
traduire le 1er script.
Par contre, je butte tjrs sur le second, surtout en raison de
l'incompréhension du format de date utilisé.

Je redonne le script avec mes interrogations en bout de ligne:

#!perl
# Shell permettant de donner la date en variable d'environnement

$Decalage†400;

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time-$Decala
ge); <----- Est ce l'heure systeme (donc la date du jour) moins 1 jour
(86400 s) ???

$Date=sprintf "%02d%02d%02d",$year-100,$mon+1,$mday; <----- Format attendu
de la date ??? Je comprends pas le $year-100 (par rapport à un $year+100
$year-100 = 1904 ???) et me demande à quoi sert la ligne précédente ds
l'écriture de la variable $Date

chdir "e:/polisoft/batch/";
$commande="TransLog.bat ".$Date;
system($commande);


$Date: ne serait ce pas la date du jour moins 1 jour ?? Quel est le format
attendu pour $Date (YYMMDD avec DD = jour actuel -1 ?) ???.

Merci encore à vous.
Dom
Avatar
oups
DL wrote:
Par contre, je butte tjrs sur le second, surtout en raison de
l'incompréhension du format de date utilisé.

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time-$Decala
ge); <----- Est ce l'heure systeme (donc la date du jour) moins 1 jour
(86400 s) ???
time Returns the number of non-leap seconds since whatever time the

system considers to be the epoch (that's 00:00:00, January 1,
1904 for Mac OS, and 00:00:00 UTC, January 1, 1970 for most
other systems). Suitable for feeding to "gmtime" and
"localtime".
localtime EXPR
Converts a time as returned by the time function to a 9-element
list with the time analyzed for the local time zone.

==> Donc oui pour ta question



$Date=sprintf "%02d%02d%02d",$year-100,$mon+1,$mday; <----- Format attendu
de la date ??? Je comprends pas le $year-100 (par rapport à un $year+100
$year-100 = 1904 ???) et me demande à quoi sert la ligne précédente ds
l'écriture de la variable $Date

localtime EXPR
...
$year is the number of years since 1900. That is, $year is 123 in year 2023.

==> le -100 sert a obtenir les deux dernier chiffre de la date mais attention
cette méthode retourne un chiffre erroné pour les date avant 2000 j'aurais
plutot mis un test...

avec : Thu Jul 12:52:54 Paris, Madrid (heure d'été) 2004
comme date et heure
$Date vaut 040721 (yymmdd; dd=hier)

Cordialement,
--
oups

mail: see http://oupsinet.free.fr/mail.html

Avatar
Alain BARBET
Par contre, je butte tjrs sur le second, surtout en raison de
l'incompréhension du format de date utilisé.

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time-$Decala
ge); <----- Est ce l'heure systeme (donc la date du jour) moins 1 jour
(86400 s) ???



Connais tu perldoc ? c'est ton ami, il t'attend.
perldoc -f localtime

$Date=sprintf "%02d%02d%02d",$year-100,$mon+1,$mday; <----- Format attendu
de la date ??? Je comprends pas le $year-100 (par rapport à un $year+100
$year-100 = 1904 ???) et me demande à quoi sert la ligne précédente ds
l'écriture de la variable $Date

localtime EXPR
...
$year is the number of years since 1900. That is, $year is 123 in year 2023.


C'est pourquoi il est plus judicieux de faire +1900 plutot que -100,
comme conceille par la doc ... cf perldoc -f localtime

Qu'est ce qu'il sont radin alors ces informat', pourtant quand tu vois
le prix des dd aujourd'hui ...

Mais bon, si c'est pour faire du VB avec apres, mouarf c'est pas bien
grave, on n'est pas a un bug pres :-)


Avatar
DL
Merci beaucoup à tous !!!