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 :

mkdir et xlswrite : warning [Débutant]


Sujet :

MATLAB

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut mkdir et xlswrite : warning
    Bonjour à tous,

    Je souhaiterais essayer de résoudre un problème qui traîne mais que j'ai négligé jusque-là. Je dispose d'une fonction qui marche et où j'utilise un mkdir. Voici la fonction (que vous ne pourrez pas tester puisqu'elle fait partie d'un tout) :

    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
    function fid0=divise_1ph(filename, passe, f0)
    ff0=filename(1:size(filename, 2)-5);
     
    N=size(ff0,2);
    if (ff0(N)=='1'),
        rep=ff0(1:N-2);
    else
        rep=ff0(1:N-3);
    end
     
     
    ff0=strcat(passe,rep,'\',ff0,'\');
    mkdir(ff0);
    f0=strcat(ff0,f0);
    fid0=fopen(f0,'w');
    Elle prend en paramètre un nom (filename), une localisation (passe) et un fichier (f0). Au début j'ai besoin de faire une distinction sur le paramètre filename puis dans ff0 plus bas je stocke le nom d'un repertoire à créer. Bref tout marche mais la ligne avec mkdir produit un warning du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Directory "C:\MATLAB701\work\IMP\DATA\48-4\48-4-1" already exists.
    Pourtant le répertoire n'existe pas encore et il va être créer par la suite.


    Autre problème similaire : voici une fonction où j'emploie xlswrite :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    function write_reflux_3_colonnes(repertoire,tableau_reflux_liquide_melange_trier)
     
    if ~isempty(tableau_reflux_liquide_melange_trier)
     
    %Cette fonction écrit dans un fichier Excel les événements de reflux et les
    %psites affectées dans la méthode etude_de_courbe_reflux_extrema_bis et
    %etude_de_courbe_reflux_extrema_bis2.
     
    %On écrit le .xls dans le bon répertoire à chaque fois i.e. le répertoire
    %racine : si répertoire='12-2-1' on écrira le .xls dans 12-2
     
    T0=strcat(repertoire, '_result_extrema_3C'); %ils s'agit de 'repertoire_result_extrema_3C'
    T01=strfind(repertoire,'-');
    T02=strcat('C:\MATLAB701\work\IMP\DATA\',repertoire(1:(T01(1)+1)),'\',T0);
     
    %Données utiles
     
    Tableau_cellule1 = cell(1,3);
    Tableau_cellule1{1,1} = 'debut';
    Tableau_cellule1{1,2} = 'fin';
    Tableau_cellule1{1,3} = 'pistes';
     
    %Ecriture des 3 colonnes dans la feuille result
     
    xlswrite(T02,Tableau_cellule1,'result','A1');
    xlswrite(T02,tableau_reflux_liquide_melange_trier,'result','A2');
     
    end
    A chaque appel à xlswrite, je me retrouve avec un warning du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Warning: Added specified worksheet.
    > In xlswrite>activate_sheet at 259
      In xlswrite at 213
      In write_reflux_3_colonnes at 25
      In etude_de_courbe_reflux_extrema_bis2 at 324
      In auto_1ph_bis2 at 53
    Je voudrais donc savoir comment ne plus avoir ces warning.

  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 : 53 166
    Points
    53 166
    Par défaut
    Pour la première question, a priori le dossier existe.

    Tu peux toujours remplacer :

    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if exist(ff0,'dir')~=7
        mkdir(ff0);
    end
    Pour la question à propos de xlswrite, essaye en utilisant les arguments de sortie de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [status,msginfo] = xlswrite(...);
    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
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Merci Dut,

    J'apporte quelques compléments pour la première question : après quelques debuguage, je vois quand apparaît l'erreur. En fait, la fonction divise_1ph_bis2 est appelée comme ceci dans une autre fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fid0=divise_1ph_bis2(filename, pathname,'PhData.int');
    fid1=divise_1ph_bis2(filename, pathname,'Imp1.int');
    fid2=divise_1ph_bis2(filename, pathname,'Imp2.int');
    fid3=divise_1ph_bis2(filename, pathname,'Imp3.int');
    fid4=divise_1ph_bis2(filename, pathname,'Imp4.int');
    fid5=divise_1ph_bis2(filename, pathname,'Imp5.int');
    fid6=divise_1ph_bis2(filename, pathname,'Imp6.int');
    Le warning se produit à la seconde ligne, lors de l'appel sur 'Imp1.int' et toutes les lignes qui suivent mais, en revanche, il ne se produit pas lors de l'appel avec 'PhData.in' à la première ligne. Donc, effectivement tu avais bien raison : dès la première ligne le répertoire est crée, et lors des lignes suivantes Matlab me dit qu'effectivement il existe déjà. La seule chose qui change c'est que là où j'ai écrit le 'PhData.int' j'écris également d'autres .int. J'ai donc rajouté les lignes avec la condition if que tu proposes et cela semble fonctionner ! Par contre je ne comprends pas pourquoi on compare au chiffre '7' ? Pourquoi ne pas écrire comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ~exist(ff0,'dir')
        mkdir(ff0);
    end
    Pour le second problème, j'ai donc rajouter le [status,msginfo] à chaque fois que j'appelle xlswrite dans la fonction ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [status,msginfo]=xlswrite(T02,Tableau_cellule1,'result','A1');
    [status,msginfo]=xlswrite(T02,tableau_reflux_liquide_melange_trier,'result','A2');
    J'obtiens alors un warning seulement lors du premier appel de xlswrite mais pas lors du second...mais c'est aussi le cas si je ne rajoute pas [status,msginfo]devant. Il semble donc que le warning ait lieu lors du premier appel de xlswrite. De plus, si jamais je relance xlswrite et que le xls existe déjà je n'ai pas de warning.

  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 : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par abel413 Voir le message
    Par contre je ne comprends pas pourquoi on compare au chiffre '7' ?
    Pour faire court, parce que c'est écrit dans la documentation.


    Citation Envoyé par abel413 Voir le message
    J'obtiens alors un warning seulement lors du premier appel de xlswrite mais pas lors du second...mais c'est aussi le cas si je ne rajoute pas [status,msginfo]devant. Il semble donc que le warning ait lieu lors du premier appel de xlswrite. De plus, si jamais je relance xlswrite et que le xls existe déjà je n'ai pas de warning.
    C'est normal puisque le warning t'indique seulement que la feuille 'result' n'existe pas lors de la première écriture dans le xls.
    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
    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 : 53 166
    Points
    53 166
    Par défaut
    Je viens de tester et tu peux ajouter ceci au tout début de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    warning('off','MATLAB:xlswrite:AddSheet')
    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)

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    D'accord pour le premier point, disons que c'est donc une convention.

    Pour le second point : oui effectivement la feuille n'existe pas car je veux la créer, y a t-il tout de même un moyen d'éviter ce warning (autre que de créer les xls par avance avec une feuille result vide par exemple) ?

    EDIT:

    D'accord je vais tester ce que tu proposes.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par abel413 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ff0=strcat(passe,rep,'\',ff0,'\');
    On préfèrera utiliser la fonction fullfile à strcat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ff0 = fullfile(passe,rep,ff0);
    Voir FAQ.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    Dut

    Effectivement je te remercie beaucoup, il n'y a plus de warning maintenant ! Cependant je ne crois que je gagne en temps pour autant, en tout cas très peu. J'avais en tête que supprimer l'apparition des warning me permettrait de gagner en temps de même que lorsque l'on 'on met des ";" à la fin des lignes de codes. C'est vrai que c'est tout de même légèrement plus rapide.

    Winjerome

    Oui je te remercie. Toi et Dut me faites souvent la remarque sur l'utilisation de fullfile au lieu de strcat. Mais, étant donné que je ne perd pas en rapidité d’exécution (tout au moins la rapidité me convient quand même), je ne vois pas l'utilité de l'utiliser excepté bien sûr pour ne plus écrire des '/'. En fait c'est ce que je demandais à Dut hier : y a-t-il parfois, dans certain contexte une très bonne raison à préférer l'un plutôt que l'autre ?

  9. #9
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    Citation Envoyé par abel413 Voir le message
    y a-t-il parfois, dans certain contexte une très bonne raison à préférer l'un plutôt que l'autre ?
    la portabilité entre plateforme (windows, linux, ...)
    et les règles de l'art !

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 401
    Points : 102
    Points
    102
    Par défaut
    D'accord merci bien ; je resterai sur Windows donc c'est bon.

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

Discussions similaires

  1. [2.x] Warning: mkdir(): Permission denied in Entity/MyEntity.php
    Par aitiahcene dans le forum Symfony
    Réponses: 4
    Dernier message: 11/06/2012, 16h23
  2. Un warning devient fatal
    Par tomnie dans le forum Linux
    Réponses: 3
    Dernier message: 01/04/2004, 13h48
  3. [langage] Récupérer des Warning ??
    Par armada dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 16h45
  4. [warning][properties]problème de police introuvable
    Par cyrdec dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/04/2003, 17h41
  5. Warnings lors de la compilation
    Par polo54 dans le forum C
    Réponses: 5
    Dernier message: 07/02/2003, 09h12

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