Perl [Modification d'un programme existant] Probleme avec If - Perl - Programmation
Marsh Posté le 25-11-2009 à 14:09:28
c'est quoi ton message d'erreur précis ?
à chaud comme ca je dirais que tu essaies de faire un test sur une variable qui n'existe pas (car une checkbox non coché est une variable non envoyé)
il faudrait donc plutôt utiliser un if(defined())
Marsh Posté le 25-11-2009 à 14:20:25
Ben j'ai pas de message d'erreur justement, mais que la case soit cochée ou non ne change rien.
J'ai toujour comme résultat :
$nom =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (COMMUNITY = $comm)(PROTOCOL = $prot)(Host = $host)(Port = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $serv)
)
)";
En plus je n'est jamais touché au Perl donc je suis un peu perdu.
Marsh Posté le 25-11-2009 à 14:36:52
j'ai modifié le debut de mon if.
J'ai donc mis :
if(defined($query->param('SID')))
Mais j'ai toujour le même résultat, et ce sans message d'erreurs.
Marsh Posté le 25-11-2009 à 16:02:50
Dans le code que tu as mis en ligne:
Code : |
ca devrait pas être plutot /^[A-Za-z0-9 _'-.]+$/
Parce que dans ce contexte, \$ va être interprété comme le caractère $ et non pas comme le marqueur de fin de champ/ligne pour une expression régulière.
Même remarque pour
Code : |
A+,
Marsh Posté le 25-11-2009 à 16:22:47
Alors, ce bout de code ce n'est pa smoi qui l'est écrit, il était écrit avant et le programme marchai très bien avec.
Donc je prefere ne pas y toucher.
La seule chose que j'ai à faire c'est de rajouter une checkbox et de mettre les instructions correspondante.
Marsh Posté le 25-11-2009 à 16:47:37
Citation : Alors, ce bout de code ce n'est pa smoi qui l'est écrit, il était écrit avant et le programme marchai très bien avec. |
Désolé, mais c'est le genre d'attitude que je ne cautionne pas, je n'irai donc pas plus loin dans ce topic.
La programmation vaudou et moi ça fait deux.
A+,
Marsh Posté le 25-11-2009 à 16:51:26
Et bien figure toi que je ne suis pas pour non plus mais je n'est pas le choix.
A mon boulot, on m'a donné ce programme à modifié alors que je n'est jamais touché Perl de ma vie...
Si je pouvai éviter de reprendre le script de quelqu'un d'autre ne t'inquiète pas je le ferai, hors là, je n'est pas le choix.
Marsh Posté le 25-11-2009 à 16:55:55
Je rajoute ici quelque infos....
Je doit effectuer donc effectuer une modification sur un script en Perl.
L’objectif de cette modification est de rendre le fichier compatible avec l’ensemble des versions Oracle actuellement utilisées au sein de mon entreprise.
A l’heure actuelle, la syntaxe utilisée lors de l’écriture des descripteurs de connexion définit systématiquement le service de connexion par SERVICE_NAME, soit :
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (COMMUNITY = $comm)(PROTOCOL = $prot)(Host = $host)(Port = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $serv)
Or les versions Oracle antérieures à la version 8 ne peuvent être atteintes que par SID, soit :
(DESCRIPTION =
(ADDRESS = (PROTOCOL = $prot)(Host = $host)(Port = $port))
)
(CONNECT_DATA =
(SID = $serv)
Je vous met si dessou le script d'origine ainsi que celui que j'ai commencé à modifier :
Script non modifié :
http://pastebin.com/m1b902bb9
Script modifié :
http://pastebin.com/m4fdb2f73
Ma checkbox ce trouve ligne 282 à 287 ainsi que ligne 413 à 418.
Mon if quant à lui ce trouve de la ligne 114 à 125.
A savoir que je n'est JAMAIS manipulé de Perl, donc je suis un peu perdu.
Les changements effectués ne provoque pas d'erreur mais ne modifie pas non plus le resultat.
Merci pour votre aide.
Marsh Posté le 25-11-2009 à 17:09:00
Il faut utiliser eq en perl pour comparer des chaines:
if ($query->param('SID') eq 'oui')
c'est pour cela que tu ne passes pas dans le code de ton test.
A+,
Marsh Posté le 25-11-2009 à 18:37:47
Alors, j'ai changé cette ligne mais cela ne fonctionne toujour pas.
Je remet le script tel qu'il est à present :
http://pastebin.com/m1f1a5e
Marsh Posté le 25-11-2009 à 19:00:26
C'est sur qu'un bloc if sans son accolade fermante, ça a peu de chance de marcher:
Code :
|
Manque le } fermant ce bloc, qui pourtant figurait dans votre version précédente.
A+,
Marsh Posté le 25-11-2009 à 19:05:25
Et bien en fait, sa ne fonctionne pas non plus avec le } ...
Et j'ai vu au dessu qu'elle ni était pas donc bon j'ai tenté xD
Je suis à cours.
Marsh Posté le 25-11-2009 à 19:08:29
Et manifestement, vous n'avez pas compris mon mail en mp, puisque vous avez laissé:
Code :
|
qui a clairement une parenthèse fermante de trop, alors que très probablement, un truc de ce genre, au vu de la structure d'avant:
Code :
|
A+,
Marsh Posté le 25-11-2009 à 19:15:26
Ok, dsl je n'avai pas compris si il fallai que je la supprime ou que je la deplace. Dsl.
J'ai donc supprimé cette parenthèse^^
Mais le resultat est toujour le même.
Marsh Posté le 25-11-2009 à 19:20:06
Citation : my $nouveau=" |
Si vous déclarez $nouveau comme une variable locale au bloc du if, avec le my, elle va disparaitre dès qu'on sort du bloc, et c'est l'ancienne valeur de $nouveau qui va réapparaitre.
C'est donc un
Code :
|
qu'il faut faire: ici, vous remplacez la valeur de la variable $nouveau, déclarée précédemment.
A+,
Marsh Posté le 25-11-2009 à 19:56:47
Merci beaucoup!
Ca fonctionne!
Encore merci et bonne soirée
Marsh Posté le 26-11-2009 à 12:09:31
Alors, petite rectification... sa ne fonctionne pas si bien que sa finalement xD
Lorsque je valide l'ajout, j'ai bien mon 'SID' qui apparait mais, celui-ci n'est pas rajouté à ma liste.
Je reposte ici le script actuel :
http://pastebin.com/m521d24b9
La modification à faire devrai ce trouver par là, je test un peu pour voir mais bon...
#passe à 1 apres l'ajout
my $lignes="################
# Filename......: tnsnames.ora
# Name..........: LOCAL_REGION.world
# Date..........: 22-JAN-98 12:39:24
################";
$i=0;
my $ajoute=0;
while ($i<@liste)
{
if ($i==$place)
{
$ajoute=1;
$lignes.="
$nom =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (COMMUNITY = $comm)(PROTOCOL = $prot)(Host = $host)(Port = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $serv)
)
)";
}
$lignes.="
$liste[$i][0] =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (COMMUNITY = $liste[$i][1])(PROTOCOL = $liste[$i][2])(Host = $liste[$i][3])(Port = $liste[$i][4]))
)
(CONNECT_DATA =
(SERVICE_NAME = $liste[$i][5])
)
)";
$i++;
}
if ($ajoute==0)
{
#Ajoute a la fin
$lignes.="
$nom =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (COMMUNITY = $comm)(PROTOCOL = $prot)(Host = $host)(Port = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $serv)
)
)";
}
Pour l'instant je n'est rien de bien concluant...
Je continu mes recherches et je posterai ce que j'ai fait lorsque j'aurai trouvé quelque chose d'à peu près potable.
En tout cas merci Gilou pour votre aide.
Marsh Posté le 25-11-2009 à 12:08:53
Bonjour,
Je doit modifié un programme réalisé sous Perl.
Le but de ma modification était de rajouter un checkboc 'SID' et donc de faire comprendre au programme que si ma checkbox est coché le renvoi ne sera pas le même.
C'est à dire que si la checkbox 'SID' est décochée, le programme s'executera normalement et me renvera :
$nom =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (COMMUNITY = $comm)(PROTOCOL = $prot)(Host = $host)(Port = $port))
)
(CONNECT_DATA =
(SERVICE_NAME = $serv)
)
)";
En revanche, si la checkbox 'SID' est cochée, le programme me renvera :
$nom =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = $prot)(Host = $host)(Port = $port))
)
(CONNECT_DATA =
(SID = $serv)
)
)";
Je vous poste donc mon script...déja modifié mais qui ne fonctionne pas.
J'ai bien ma checkbox mais le if me pose des problèmes.
http://pastebin.com/m3e56bc89
Le if de la checkbox ce trouve ligne 112 à 124.
Ma checkbox 'SID' ce trouve ligne 281 à 286 et ligne 414 à 419
Merci d'avance.