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 :

Un debutant appelle a l aide.A L AIDE


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Un debutant appelle a l aide.A L AIDE
    Bonjour,

    Apres avoir etudie il y a quelques annees les rudiments du C++, je me remets a la programmation a travers le langage PERL, et les debuts sont difficiles...

    J'aimerais creer un programme qui ouvre deux fichiers txt, exporte les donnees (coordonnees de point(x,y,z))de chaque fichier et les regroupe dans un seul fichier apres avoir transforme la column z par -z.

    pour mon premier programme en perl je subis un bel echec,... mon message d erreur est:
    can't use string "00" as an array ref while "strict refs" in use

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Hmm, il faudrait déjà que tu penses à identer le code, ca te permettrait d'y voir un peu plus clair.

    Ton problème vient à mon avis des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    push @matrix1, [@line];
    à remplacer par
    PS : au lieu d'écrire du code du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if  ( $name1 =~ /.txt/ )
    {}
    else{$name1.= '.txt' ;}
    tu pourrais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if  ( $name1 !~ /.txt/ ) {$name1.= '.txt' ;}
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unless ($name1 =~ /.txt/)  {$name1.= '.txt' ;}
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $name1.= '.txt' , unless ($name1 =~ /.txt/) ;

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci beaucoup pour ton aide, cependant, je suis encore bloque.

    J'ai fais les modifications que tu m as apporte et essaye de nombreuse autres choses..

    Mon prgramme compile desormais, mais il ne fait pas ce que je lui demande. je pense savoir ou il ne comprend plus (en gras dans le text), problem avec push je pense...

    Quelqu un a t il un peu de temps pour me conseiller?

    En cherchant sur internet, avant de vous contacter, pour expliquer mes messages d erreur precedent, j ai appris que certains d entre eux pouvait venir du fait que j utilise PERL5.

    Je vous laisse mon programme, et vais continue de chercher de mon cote

    Merci
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Désolé, mais sur ce forum, on ne débug pas de programmes complets. Isole la partie qui bloque, et pose une question plus précise...

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  5. #5
    Membre actif Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Points : 219
    Points
    219
    Par défaut
    heu juste une question dans ton code tu écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach $line2 (<fichier2>)
    {
    chomp($line2);
    @ref2 = split(" ",$line2);
    push (@matrix,/@ref2);
    }
    ce qui me fait tiquer c'est c'est une erreur non ? parce que je connais \@ref2 mais pas /@ref2

    merci d'éclairer ma lanterne
    Vista powaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ::

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci pour vos reponses. En effet, /@ref2 etait une erreur de ma part,...avant d envoyer le code, je n y voyais plus vraiment clair sachant que j ai changé ces lignes une bonne dizaine de fois.

    Je joins la partie du programme qui ne semble pas compiler. Fichier3 se creer, cependant il reste vide. le tableau @matrix qu j essaie de creer a partir de deux fichiers dont leur contenue devraient etre concatenés dans @matrix, ne marche pas. Mon probleme vient de mes boucles foreach, mais j ai besoin d aide pour les ameliorer.


    Merci
    Fichiers attachés Fichiers attachés

  7. #7
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Le problème vient surtout de ta dernière boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    foreach $line (@matrix)
    {
    chomp($line);
    @data = split(" ",$line); 
    $data[2]*=-1 , unless ($data[2]<0);
    print fichier3 "\t[@data],\n";
    }
    close (fichier3) || die "Problème à la fermeture : $!";
    Dans ton tableau @matrix, tu as mis des références de tableau, pas des chaines de caractère !!! tu les as déjà splittées.. Ca devrait plutot ressembler à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach $dataRef (@matrix)
    {
    $$dataRef[2]*=-1 , unless ($$dataRef[2]<0);
    print fichier3 "\t[@$dataRef],\n";
    }

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    merci une fois de plus pour vos reponses.

    Mais mon programme ne marche toujours pas, et meme aprs maintes modofications, pas moyen qu il me fasse plaisir.

    J aimerais que ce programme copie le contenue de deux fichiers dans un tableau que j ai nomme @matrix

    J ai maintenant initialiser mon tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for($t=0;$t<$total;$t++)
    {
    $matrix[$t][0]=0;
    $matrix[$t][1]=0;
    $matrix[$t][2]=0;
    }
    avec $total le nombre de ligne contenu dans mes fichiers.txt.

    ensuite je cree des boucles sur chaque fichier et les copie dans mon tabeau @matrix;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $k=0;
    foreach $line1 (<fichier1>)
    {
    print $$line1[0];
    chomp($$line1);
    $matrix[$k][0]=$$line1[0];
    $matrix[$k][1]=$$line1[1];
    $matrix[$k][2]=$$line1[2];
    $k=$k+1;
    }
     
    foreach $line2 (<fichier2>)
    {
    chomp($line2);
    $matrix[$k][0]=$$line2[0];
    $matrix[$k][1]=$$line2[1];
    $matrix[$k][2]=$$line2[2];
    $k++;
    }
    ou encore;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($line2 =<fichier2>)
    {
    chomp($line2);
    push(@matrix,$line2);
    }
    et ca ne marche pas,...
    Mon fichier de sortie dans lequel je copie a la fin @matrix contient un tableau de zero; celui genere lors de l initialisation.

    Puis je demander une nouvel fois de l aide?

    Merci
    J attache mon programme au cas ou cela serait utile.
    Fichiers attachés Fichiers attachés

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    ps: meme lorsque j insere dans ma boucle foreach en premiere ligne d execution: print $$line1[0]; cela ne donne rien.
    Savait vous pourquoi?

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/02/2006, 18h31
  2. [debutant]appeller une fonction d'une classe fille et mere ?
    Par Battosaiii dans le forum Débuter
    Réponses: 1
    Dernier message: 12/11/2005, 12h56
  3. [debutant]appeler une methode d'un autre document
    Par la7su dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/10/2005, 10h22
  4. [Débutant(e)][JDIC] Ouvrir un fichier d'aide
    Par alex'l dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 12/09/2005, 10h40
  5. [EJB] [Debutant] Appel d'EJB distants + divers
    Par LAlex dans le forum Java EE
    Réponses: 18
    Dernier message: 16/06/2003, 17h11

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