Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2268 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1944374
Monostone
Posté le 25-11-2009 à 12:08:53  profilanswer
 

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.

mood
Publicité
Posté le 25-11-2009 à 12:08:53  profilanswer
 

n°1944446
couak
Posté le 25-11-2009 à 14:09:28  profilanswer
 

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

n°1944461
Monostone
Posté le 25-11-2009 à 14:20:25  profilanswer
 

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.

n°1944481
Monostone
Posté le 25-11-2009 à 14:36:52  profilanswer
 

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.

n°1944625
gilou
Modérateur
Modzilla
Posté le 25-11-2009 à 16:02:50  profilanswer
 

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é!  --
n°1944644
Monostone
Posté le 25-11-2009 à 16:22:47  profilanswer
 

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.

n°1944652
gilou
Modérateur
Modzilla
Posté le 25-11-2009 à 16:47:37  profilanswer
 

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é!  --
n°1944653
Monostone
Posté le 25-11-2009 à 16:51:26  profilanswer
 

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.

n°1944655
Monostone
Posté le 25-11-2009 à 16:55:55  profilanswer
 

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.

n°1944657
gilou
Modérateur
Modzilla
Posté le 25-11-2009 à 17:09:00  profilanswer
 

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é!  --
mood
Publicité
Posté le 25-11-2009 à 17:09:00  profilanswer
 

n°1944712
Monostone
Posté le 25-11-2009 à 18:37:47  profilanswer
 

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

n°1944720
gilou
Modérateur
Modzilla
Posté le 25-11-2009 à 19:00:26  profilanswer
 

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é!  --
n°1944722
Monostone
Posté le 25-11-2009 à 19:05:25  profilanswer
 

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.

n°1944724
gilou
Modérateur
Modzilla
Posté le 25-11-2009 à 19:08:29  profilanswer
 

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é!  --
n°1944726
Monostone
Posté le 25-11-2009 à 19:15:26  profilanswer
 

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.

n°1944727
gilou
Modérateur
Modzilla
Posté le 25-11-2009 à 19:20:06  profilanswer
 

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é!  --
n°1944735
Monostone
Posté le 25-11-2009 à 19:56:47  profilanswer
 

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

n°1944890
Monostone
Posté le 26-11-2009 à 12:09:31  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

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

 

Sujets relatifs
Perl - fonctions simplesProbleme de config Apache avec Firebird
Problème de connexion avec le serveur MySQLProblème rafraichissement JLabel
Problème de lecture de base de données SQLite (Java)(DEBUTANT) Probleme de classe en c++
problème de lecture d'un fichier texteProblème configuration phpMyAdmin
Automatiser tâche (script) via programme : Possible ?URGENT : problème shell windows boucle for
Plus de sujets relatifs à : Perl [Modification d'un programme existant] Probleme avec If


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR