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

MATLAB Discussion :

[hdftool] Bloquer l'execution du programme tant que le workspace est vide


Sujet :

MATLAB

  1. #1
    Membre régulier Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 75
    Points
    75
    Par défaut [hdftool] Bloquer l'execution du programme tant que le workspace est vide
    Bonjour,

    Comme le titre l'indique je cherche a bloquer l'exécution de mon programme tant que mon Workspace est vide.

    J'utilise la fonction hdftool qui permet de charger des fichiers "*.hdf" dans MATLAB, ce que je veux c'est que l'utilisateur ai le temps de choisir les données qu'il veut importer. De plus je dois automatiquement renommer la variable créée par l'importation de données dans le workspace pour pouvoir faire appelle a une fonction que j'ai créée. Et pour renommer cette variable, il faut laisser le temps à l'utilisateur de choisir et d'importer ses données.

    voici ce que j'ai essayer de faire et qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    hdftool;
     
    list=who;
    test=isempty(list);
     
    while test==1
    wait
    end
     
    data=list{1}; %on renomme la variable importée
    clear (sprintf('%s',list{1})) %on supprime la variable sous son ancien nom
    clear list
    le problème qui se pose avec ce code, c'est qu'il bloque complètement le programme y compris le chargement des données via hdftool :/

  2. #2
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Hum...plutôt que de faire ça (j'avoue ne pas voir comment ce serait possible), tu devrais envisager d'autres solutions, non ?

    Si je comprends bien tu utilises HDFTOOL pour que l'utilisateur sélectionne son fichier et d'autres choses.
    Autant utiliser le handle de l'objet graphique créé et utiliser la commande WAITFOR :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    h=hdftool;
    waitfor(h);
    Le code ne continuera après le WAITFOR qu'une fois la fenêtre HDFTOOL fermée.
    Cela devrait répondre à ton besoin.

    Après, pourquoi ton code ne fonctionne pas :
    1. Parce que dans le WHILE la variable test n'est jamais réévaluée, elle vaut toujours 1.
    2. WAIT n'est pas du tout fait pour ça, il faut utiliser PAUSE.
    Un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    test=1;
    while test
       list=who;
       test=isempty(list);
       pause(1)
    end
    Aurait été mieux, mais ne fonctionnera pas car tu n'auras pas la main sur l'interface graphique il me semble.

    Ensuite, le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data=list{1}; %on renomme la variable importée
    ne fait surement pas ce que tu imagines :
    il affecte dans data la chaine de caractères qui est dans list{1} (donc le nom de la variable et non pas sa valeur)
    Dans ce cas il doit falloir (je ne vois pas d'autre solution et ça me coute de l'écrire ) utiliser EVAL :

  3. #3
    Membre régulier Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 75
    Points
    75
    Par défaut
    Malheureusement ni le waitfor ni le pause ne fonctionne :/
    Mais merci pour la deuxième partie sur l'utilisation d'eval, je ne m'étais pas encore concentré sur cette partie du code.

    Je vais malheureusement devoir envisager de sortir hdftool du programme, même si je n'aime pas trop cette solution qui diminue la facilité d'utilisation du programme.

  4. #4
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    Citation Envoyé par Flaherty Mc Coillean Voir le message
    Malheureusement ni le waitfor ni le pause ne fonctionne
    Peux-tu préciser ce qui ne fonctionne pas ?
    Pourrais-tu aussi fournir un fichier hdf zippé pour que l'on puisse faire des tests ?

  5. #5
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 828
    Points
    14 828
    Par défaut
    De plus ne peux-tu faire autrement :

    • Utiliser UIGETFILE pour que l'utilisateur choisisse le fichier à importer.
    • Utiliser les fonctions HDF* existants dans MATLAB pour traiter le fichier

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Citation Envoyé par Flaherty Mc Coillean Voir le message
    l'utilisateur ai le temps de choisir les données qu'il veut importer.
    C'est ça le coeur du problème ici. Et je rejoins Caro sur ce point.

    Il faut se poser la question de savoir si cette étape doit nécessairement s'effectuer avec HDFTOOL.

    Pourquoi ne pas charger toutes les variables disponibles dans le fichier avec HDFREAD (sous réserve qu'on ne rencontre pas une limitation mémoire) et créer une petite interface où l'utilisateur sélectionne les variables qui l'intéresse.

    Une version très légère de HDFTOOL en quelque sorte sur laquelle tu gardes tout le contrôle nécessaire

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Ayé... trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    h = hdftool;
    disp('HDFTOOL ouvert')
    waitfor(h.figureHandle)
    disp('HDFTOOL fermé')

  8. #8
    Membre régulier Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 75
    Points
    75
    Par défaut
    Arf désolé Dut, mais ta méthode ne marche pas chez moi :/
    (Matlab R14 - sous Vista)

    voici mon tout petit code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    clear all
    close all
    clc
     
    h = hdftool;
    disp('HDFTOOL ouvert')
    waitfor(h.figureHandle)
    disp('HDFTOOL fermé')
     
    list=who;
    data=eval(list{1});
    voici le message d'erreur que ça m'affiche :
    HDFTOOL ouvert
    ??? No appropriate method or public field figureHandle for class com.mathworks.toolbox.matlab.iofun.Importer.

    Error in ==> MODIS at 7
    waitfor(h.figureHandle)
    -----

    Citation Envoyé par Caro-Line
    Citation Envoyé par Flaherty Mc Coillean
    Malheureusement ni le waitfor ni le pause ne fonctionne
    Peux-tu préciser ce qui ne fonctionne pas ?
    Pourrais-tu aussi fournir un fichier hdf zippé pour que l'on puisse faire des tests ?
    Dans le cas de waitfor : l'ensemble du programme est bloqué, même l'importation de donnée par hdftool.
    Dans le cas de pause : l'exécution du programme n'est absolument pas bloquée.

    Je vous fournis un fichier "*.hdf" pour que vous puissiez faire des tests (ne vous en fait pas ce fichier est distribué gratuitement par la nasa - c'est une image de Madagascar et la réunion). Si je préfère utiliser hdftool plutôt que uigetfile, c'est à cause de la quantité et la complexité des infos que l'on trouve dans un de ces fichiers "*.hdf", j'aurais trop peur de me perdre ^^

    lien vers le fichier "*.hdf" Attention il fait 160 Mo, j'ai essayé de le compresser, mais ça ne changeait pas son poids :/

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948
    Par défaut
    Citation Envoyé par Flaherty Mc Coillean Voir le message
    (Matlab R14 - sous Vista)
    Quel version exactement ?
    Que renvoie ceci dans le Command Windows ?

  10. #10
    Membre régulier Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 75
    Points
    75
    Par défaut
    c'est la :
    7.0.0.19920 (R14)

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 316
    Points : 52 948
    Points
    52 948
    Par défaut
    A priori, dans les anciennes versions, la fenêtre est construite sur une frame Java... et ce type d'objet ne peut pas être rendu modal.

    En même temps mon niveau en Java est très pauvre, donc je dis peut être des bêtises...

    Sinon, pourquoi ne pas avoir une interface avec :
    • un bouton "Lire HDF" qui lancerait HDFTOOL
    • un autre bouton "Suite du programme"


    L'utilisateur clique sur le premier, récupère ce qu'il veut du fichier, ferme HDFTOOL et clique sur le second bouton, non ?

  12. #12
    Membre régulier Avatar de Flaherty Mc Coillean
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Décembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 108
    Points : 75
    Points
    75
    Par défaut
    Effectivement c'est pas une mauvaise idée, je vais faire comme ça.

    Merci beaucoup !

Discussions similaires

  1. [Débutant] Execution d'une action tant que le bouton est cliqué
    Par Martipit dans le forum VB.NET
    Réponses: 4
    Dernier message: 10/11/2012, 20h14
  2. [XL-2003] Executer une macro dès que 4 cellules sont vides
    Par zazrun dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/02/2012, 13h14
  3. desactivé bouton fermer tant que tt n'est pas saisi
    Par mat75019 dans le forum Access
    Réponses: 7
    Dernier message: 11/04/2006, 20h34
  4. Réponses: 3
    Dernier message: 29/03/2006, 13h21
  5. Exécuter un programme des que le poste est allumé
    Par edzodzinam dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 08/02/2006, 04h08

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