Perl [Modification d'un programme existant] Probleme avec If

Perl [Modification d'un programme existant] Probleme avec If - Perl - Programmation

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.

Reply

Marsh Posté le 25-11-2009 à 12:08:53   

Reply

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

Reply

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.

Reply

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.

Reply

Marsh Posté le 25-11-2009 à 16:02:50    

Dans le code que tu as mis en ligne:

Code :
  1. return (chaine.match(/^[A-Za-z0-9 _'-.]+\$/));


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 :
  1. return nbr.match(/^[0-9]+\$/);


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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.

Reply

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.
Donc je prefere ne pas y toucher.

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+,


Message édité par gilou le 25-11-2009 à 16:48:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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.

Reply

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.

Reply

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+,


Message édité par gilou le 25-11-2009 à 17:09:27

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-11-2009 à 17:09:00   

Reply

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

Reply

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 :
  1. if ($query->param('SID') eq 'oui')
  2.  
  3.                     {
  4.     my $nouveau="
  5. $nom =
  6.     (DESCRIPTION =
  7.         (ADDRESS = (PROTOCOL = $prot)(Host = $host)(Port = $port))
  8.     )
  9.     (CONNECT_DATA =
  10.         (SID = $serv)
  11.     )
  12. )";


Manque le } fermant ce bloc, qui pourtant figurait dans votre version précédente.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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.

Reply

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 :
  1. (DESCRIPTION =
  2.     (ADDRESS = (PROTOCOL = $prot)(Host = $host)(Port = $port))
  3. )
  4. (CONNECT_DATA =
  5.     (SID = $serv)
  6. )
  7. )";

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 :
  1. (DESCRIPTION =
  2.     (ADDRESS = (PROTOCOL = $prot)(Host = $host)(Port = $port))
  3.     (CONNECT_DATA =
  4.         (SID = $serv)
  5.     )
  6. )";


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

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.

Reply

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 :
  1. if ($query->param('SID') eq 'oui')
  2.          {
  3.              $nouveau="
  4.               ...
  5.           }

qu'il faut faire: ici, vous remplacez la valeur de la variable $nouveau, déclarée précédemment.
A+,


Message édité par gilou le 25-11-2009 à 19:21:07

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-11-2009 à 19:56:47    

Merci beaucoup!
Ca fonctionne!
Encore merci et bonne soirée :)

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed