IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[langage] newbie demande de l'aide


Sujet :

Langage Perl

  1. #1
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Points : 473
    Points
    473
    Par défaut [langage] newbie demande de l'aide
    Bonjour

    habitué à d'autre langage de prog objet (delphi, VB, ...)
    j'ai été très vite rebuté par ce langage choisi par un de nos stagiaire qui, depuis est parti.

    en devant m'atteler à l'adaptation de son code, j'ai utilisé la classique méthode des "Ctrl + C", "Ctrl + V", ...

    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach my $line(@lines){
      chomp($line)
      my ($ref, $img, $dim1, $dim2, $desc, $min, $max, $rad, $len, $hght, $prix) = $line =~ m/"(.*)"\|"(.*)"\|(.*)\|(.*)\|"(.*)"\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/;
    désolé la ligne est longue.

    en déboguant mon code, j'ai trouvé que $line contenait bien la ligne que je veux qu'il lise mais pas les variables.

    pour exemple une ligne à lire ressemble à ça :

    "217.075|217.010|94|49|Arc surbaisse convexe pour portail battant de 1.00 … 1.30 mètres|1000|1300|7500|1250|102.9"

    Merci d'avance

  2. #2
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Le m après le ~ n'est pas obligatoire mais c'est un détail.
    Utilises-tu tes variables dans ta boucle for ou après ?
    Perl fonctionne par bloc de commandes pour la portée des variables, chaque bloc étant délimité par des accolades. Donc si tu utilises tes variables en dehors de ta boucle, il faut déclarer ces dernières dans le même blocv( au même niveau ) que leur utilisation. Chaque variable étant visible dans chaque sous-bloc. Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    my ($ref, $img, $dim1, $dim2, $desc, $min, $max, $rad, $len, $hght, $prix);
    foreach my $line(@lines){ 
      chomp($line) 
      ($ref, $img, $dim1, $dim2, $desc, $min, $max, $rad, $len, $hght, $prix) = $line =~ /(.*)\|(.*)\|(.*)\|(.*)\|"(.*)"\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)/; 
    .....

  3. #3
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Points : 473
    Points
    473
    Par défaut
    toutes les variables sont utilisé uniquement dans la boucle foreach
    ce n'est pas un problème de porté puisque je les déclare directement dans le seul bloc ou je les utilise.
    le problème est que le débogueur me donne pour toutes ces variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ref = undef;
    $img = undef;
    ...
    $line = '217.075|217.010|94|49|Arc surbaisse convexe pour portail battant de 1.00 … 1.30 mètres|1000|1300|7500|1250|102.9';
    donc $line contient bien ce que je veux mais pas les autres variables

  4. #4
    Jeh
    Jeh est déconnecté
    Membre actif Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Points : 250
    Points
    250
    Par défaut
    Ta ligne possède 10 éléments à matcher et tu essaies d'en matcher 11.
    Mets également un ? après chaque *, ainsi ton match s'arrête dès le premier pipe rencontré mais je sais pas si ça aura beaucoup d'impact...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Le split ne serait-il pas plus simple ?

  6. #6
    rbh
    rbh est déconnecté
    Membre confirmé Avatar de rbh
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    384
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 384
    Points : 473
    Points
    473
    Par défaut
    Désolé pas le temps (il faut que ce soit finit)

    Je vais passer à une solution en delphi

    Merci quand même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Demande de l'aide ou conseil
    Par byokyo dans le forum Langage
    Réponses: 5
    Dernier message: 31/07/2006, 12h40
  2. [langage] [newby] substitute
    Par frouge dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2005, 12h31
  3. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo