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 :

[importdata] Problème aléatoire de lecture


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [importdata] Problème aléatoire de lecture
    Bonjour,

    J'utilise la fonction "importdata" pour extraire la partie "numérique" d'un fichier de sortie d'un programme tiers contenant plusieurs lignes d'en-têtes puis les colonnes numériques qui m'intéressent:

    ******* Program HYDRUS
    *******
    Welcome to HYDRUS-1D
    Date: 15. 1. Time: 17:17:53
    Units: L = mm , T = days , M = mmol


    Node( 61) Node( 81) Node(101)

    time h theta Temp h theta Temp h theta Temp
    0.0104 -683.00 0.2228 -0.452E+02 -575.37 0.2426 -0.331E+02 -476.03 0.2656 -0.109E+03
    0.0208 -668.35 0.2253 -0.511E+02 -584.33 0.2405 -0.402E+02 -473.07 0.2665 -0.654E+02
    0.0312 -662.12 0.2263 -0.489E+02 -588.93 0.2394 -0.433E+02 -467.98 0.2680 -0.482E+02
    0.0417 -662.37 0.2263 -0.444E+02 -590.52 0.2391 -0.445E+02 -463.34 0.2694 -0.400E+02
    0.0521 -666.33 0.2256 -0.396E+02 -590.76 0.2390 -0.442E+02 -458.99 0.2708 -0.356E+02
    0.0625 -672.00 0.2246 -0.354E+02 -590.63 0.2390 -0.429E+02 -454.95 0.2720 -0.330E+02
    0.0729 -678.37 0.2236 -0.317E+02 -590.54 0.2390 -0.411E+02 -451.14 0.2732 -0.312E+02
    0.0833 -684.93 0.2224 -0.286E+02 -590.62 0.2390 -0.389E+02 -447.59 0.2742 -0.296E+02
    0.0938 -691.41 0.2213 -0.259E+02 -590.87 0.2390 -0.366E+02 -444.28 0.2752 -0.281E+02
    0.1042 -697.72 0.2203 -0.235E+02 -591.25 0.2389 -0.344E+02 -441.18 0.2762 -0.266E+02
    0.1146 -703.76 0.2192 -0.215E+02 -591.74 0.2388 -0.321E+02 -438.38 0.2770 -0.252E+02
    0.1250 -709.53 0.2183 -0.196E+02 -592.30 0.2386 -0.300E+02 -435.79 0.2778 -0.238E+02
    0.1354 -714.99 0.2173 -0.180E+02 -592.90 0.2385 -0.280E+02 -433.43 0.2785 -0.225E+02
    0.1458 -720.07 0.2165 -0.168E+02 -593.53 0.2384 -0.261E+02 -431.29 0.2792 -0.213E+02
    0.1563 -723.76 0.2158 -0.169E+02 -594.15 0.2382 -0.243E+02 -429.42 0.2798 -0.202E+02
    Le soucis, c'est que parfois, de façon assez aléatoire en fait, Matlab me renvoie une erreur:
    "Error using importdata, target is non-structured array" ou quelque chose du genre.

    Cette action est répétée des milliers de fois (simulation -> export du résultat -> traitement -> etc...), parfois aucun soucis, parfois ça me met le message d'erreur au bout de 5 simulations.

    Je suppose que ce qu'il se passe c'est qu'entre le moment ou le programme tiers termine la simulation et "écrit" le fichier résultat et le moment ou mon code arrive à l’exécution d'importdata, l'écriture du fichier résultat n'est pas encore complète ce qui serait la cause de ce message d'erreur ?


    Est-ce que la cause vous parait cohérente ? sinon quel pourrait être la raison du caractère aléatoire de ce message d'erreur ?

    Merci de m'apporter vos lumières !


    Bonne journée.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    La première chose à faire est de vérifier le contenu du fichier que la fonction importdata ne peut pas lire.

    Si il y a un problème dans le contenu du fichier par rapport aux autres fichiers lus, alors c'est le logiciel tiers qui est en cause.

    Si le contenu est correct, alors tu as surement un soucis au niveau de l'accès à ce fichier avec MATLAB alors que le logiciel tiers est encore en train d'écrire dedans.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Généralement, lorsque le code stope sur cette erreur, si je relance simplement l'appel à "importdata" l'importation se fait correctement et j'ai bien accès à la matrice souhaitée.

    tu as surement un soucis au niveau de l'accès à ce fichier avec MATLAB alors que le logiciel tiers est encore en train d'écrire dedans.
    C'est effectivement ce à quoi je pensais.

    L'utilisation d'un timer pour retarder le code permettrait donc de solutionner ce problème ?

    Merci.

    Olivier.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Comment est réalisé l'interfaçage et la synchronisation entre MATLAB et l'autre logiciel (celui-ci je pense) ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Dans le code principal, j'utilise la "fonction" d'exécution de Matlab ( ! ) pour lancer un batch en DOS qui génère les fichier d'entrée requis par le logiciel HYDRUS-1D et qui lance H1D_calc.exe, le module de calcule d'Hydrus.
    Une fois la simulation terminée, le même batch "task-kill" H1D_calc.exe pour être certain que même en cas de non-convergence ou de problème lors du calcul le processus ne reste pas actif.

    L'exécution de H1D_calc.exe permet de faire la simulation souhaitée et crée les fichiers de sortie dont celui qui m'intéresse à savoir le fichier regroupant les informations de la simulation au niveau de plusieurs points d'observation.

  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 302
    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 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Une solutions serait peut être de tester que le processus H1D_calc.exe soit terminé avant de lire le fichier résultat ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    status = dos('mybatch.bat');
     
    status = dos('TaskList | findstr H1D_calc.exe > NUL');
    while status==0
        status = dos('TaskList | findstr H1D_calc.exe > NUL');
    end
     
    if exist('result.txt','file')==2
        importdata('result.txt');
    else
        error('Pas de fichier resultat');
    end
    Voir la FAQ Batch : Comment tester si un processus est lancé ?
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Re,

    OK, je vais tester cette méthode et voir si le problème disparait, c'est vrai que c'est une solution à laquelle je n'avais pas pensé...

    Je reviens d'ici quelques jours pour donner le résultat.

    Merci.

  8. #8
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    De retour pour donner les résultats:

    Le timer (pause de 0.2 seconde) suffit pour le moment à éviter cette erreur. 2 semaines et plusieurs dizaines de milliers de simulations plus tard ce problème n'est pas réapparu.

    Merci pour les infos et l'aide apportée !

    Plouf.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/02/2007, 18h58
  2. [PHP-JS] Problème aléatoire sous Internet Explorer
    Par jibe74 dans le forum Langage
    Réponses: 13
    Dernier message: 13/02/2007, 17h19
  3. Problème avec la lecture de fichiers audio
    Par ksper92 dans le forum Flash
    Réponses: 3
    Dernier message: 22/01/2007, 13h59
  4. [VC++] Probléme d'écriture-lecture
    Par eneru.sama dans le forum Visual C++
    Réponses: 2
    Dernier message: 09/01/2007, 11h21
  5. Problèmes aléatoires
    Par ced61 dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 10h18

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