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

Shell et commandes GNU Discussion :

[GNUPLOT] print dans une fonction gnuplot


Sujet :

Shell et commandes GNU

  1. #1
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut [GNUPLOT] print dans une fonction gnuplot
    Bonjour à tous

    Ma question est toute bête.
    Dans un script gnuplot, j'ai ceci (qui marche) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    func(ch1,ch2)=(var1=ch1.ch2,\
    	n=strlen(var1),\
    	n)
     
    print(func("hey","ho"))
    ---> Me retourne bien 5

    Je le reconnais, la fonction a certes peu d'intérêt, mais ca me permet d'avoir un petit exemple.
    Maintenant admettons que l'on veuille afficher en console la chaine concaténée au sein de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    func2(ch1,ch2)=(var1=ch1.ch2,\
    	print(var1),\
    	n=strlen(var1),\
    	n)
     
    print(func2("hey","ho"))
    Et là erreur. A ma grande stupéfaction :
    undefined function: print
    J'ai chercher un peu l'origine du problème mais je n'ai pour ainsi dire rien trouvé qui m'éclaire.

    Merci pour votre aide

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour,

    "print" affiche quelque chose à l'écran. Mais que renvoie-t-il? Manifestement, rien. Tu ne peux donc pas l'intégrer dans une fonction.

    Si tu tiens à faire un script gnuplot, pourquoi ne fais-tu pas un vrai script gnuplot; au lieu de faire ce bricolage insensé à l'intérieur d'une fonction numérique?

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Il faut que la fonction renvoie obligatoirement quelque chose, pour qu'elle soit appelé ?
    Je n'ai pas écris "res=print(var1)" mais "print(var1)" donc ma fonction ne renvoie rien oui je pense.
    Mais pourquoi ceci empêcherais son utilisation dans une fonction ?

    Qu'appelles-tu un vrai script?
    Ce bricolage qui peut te paraître insensé est un exemple réduit.
    J'ai un script beaucoup plus complexe, qui me fait tout un tas de choses.
    Mais inutile que je le présente ici je pense, ca n'avancerais en rien.
    La structure de mon script est telle que le problème réduit est celui-ci...

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    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
    $ cat toto.txt
    plot 0,x*x 
    $ gnuplot -p "toto.txt"
    $ gnuplot
    
    	G N U P L O T
    	Version 4.6 patchlevel 3    last modified 2013-04-12 
    	Build System: Linux x86_64
    
    	Copyright (C) 1986-1993, 1998, 2004, 2007-2013
    	Thomas Williams, Colin Kelley and many others
    
    	gnuplot home:     http://www.gnuplot.info
    	faq, bugs, etc:   type "help FAQ"
    	immediate help:   type "help"  (plot window: hit 'h')
    
    Terminal type set to 'wxt'
    gnuplot> load "toto.txt"
    $
    Les lignes en gras sont celles qui fabriquent un graphique. Que ce soit à l'intérieur ou l'extérieur de gnuplot (intéractif).

    Du coup, dans "toto.txt", tu peux mettre des variables, des prints, des plots qui se remplacent, des plots qui s'accumulent sur la même feuille, des animations (en faisant se succéder des graphiques), etc.
    Tu peux même rendre toto.txt exécutable avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat toto.txt 
    #!/usr/bin/gnuplot -p
     
    plot 0,x*x

    J'espère avoir été clair.

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Je comprend ce que tu dis, mais je ne crains que cela ne réponde pas à mon problème.

    Mon script est long et complexe (subplot + interraction possible avec le clavier via des "bind", et j'en passe).
    Bref, pour le simplifier, et factoriser les morceaux qui se répètent je souhaite utiliser une fonction.
    Ce qui est légitime non?

    Problème : Si la fonction contient un print, il y a une erreur à l'éxécution.
    Donc dans mon cas, j'ai déjà un fichier toto.txt, et à l'intérieur de ce fichier je veux définir une fonction qui contient un print comme donnée dans mon premier message.
    Toi ce que tu me dis, c'est que je peux directement écrire print dans toto.txt.
    Oui ok, mais ca c'est ce que j'ai déjà, mais ca ne me permet pas de factoriser mon code dans mon cas.

    Je suis plus clair là ?

    Merci de t'être intéressé à mon problème.

    lg_53

Discussions similaires

  1. Recuperation de formulaire dans une fonction
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 23/06/2004, 15h04
  2. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  3. Utilisez MinimizeName() dans une fonction
    Par James_ dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/05/2004, 18h05
  4. [Postgresql]Connecter à une autre base dans une fonction
    Par alex2205 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/05/2003, 11h30
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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