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 :

error using load


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2018
    Messages : 5
    Par défaut error using load
    Bonjour,

    Je me tourne vers votre forum car je bloque dans la création de mon code. Voici actuellement le message d'erreur qui m'est retourné :

    Error using load
    Unable to read file
    'E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long\P10\output1\￿\raw\pr10.mat'. No such file or
    directory.

    Error in <a href="matlab:matlab.internal.language.introspective.errorDocCallback('wmovavrtrend', 'E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\BTT\wmovavrtrend.m', 10)" style="font-weight:bold">wmovavrtrend</a> (<a href="matlab: opentoline('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\BTT\wmovavrtrend.m',10,0)">line 10</a>)
    load(fileNm);

    Error in <a href="matlab:matlab.internal.language.introspective.errorDocCallback('BTT', 'E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\BTT\BTT.m', 120)" style="font-weight:bold">BTT</a> (<a href="matlab: opentoline('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\BTT\BTT.m',120,0)">line 120</a>)
    [MAF] = wmovavrtrend(provoNos,dirread2,provoloc);

    Error in <a href="matlab:matlab.internal.language.introspective.errorDocCallback('Untitled', 'E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\Untitled.m', 37)" style="font-weight:bold">Untitled</a> (<a href="matlab: opentoline('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\Untitled.m',37,0)">line 37</a>)
    BTT(2,10,dirread1,dirread2,dirread3)
    }
    Voici mon script :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    profil = 'P10';
    matfile = 'pr10';
    date1=load(fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long\', profil, 'date.txt'));
     
    for a=1:11
        dir=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long\', profil, ['output' num2str(a)]);
        for  b=1:8
     %charger le fichier texte créé au préalable avec le profil bathy%
                   rawdata=load(fullfile(dir, num2str(date1(b)), 'raw', [profil '.txt']));
     
                   dist2=rawdata(:,1);%colonne vecteur contenant l'information des coordonnées en x%
                   provo2=rawdata(:,2);%colonne vecteur contenant l'information d'élévation du lit%
                   provoNo=10;%numéro du profil%    
                   testNm = [num2str(profil), '_', num2str(date1(b)), '_', num2str(a)];%référence du profil en sortie%
     
                   dirread1=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long', profil, ['output' num2str(a) '\'], date1(b), 'raw\');
                   dirread2=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long', profil, ['output' num2str(a) '\'], date1(b), 'raw\');
                   dirread3=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long', profil, ['output' num2str(a) '\'], date1(b), 'results\');
     
                   xminxmax=load(fullfile(dir, ['découpage' num2str(date1(b)) '.txt']));
     
                 if xminxmax(a,2)==0
                     continue
                 else
                    diffmin=abs(xminxmax(a,2)-dist2);
                    [~, idx1]=min(diffmin);
                    xbegin=dist2(idx1)/100;%début du profil considéré, ici on considère le profil 50m en amont et en aval de V2%
                    diffmax=abs(xminxmax(a,3)-dist2);
                    [~, idx2]=min(diffmax);
                    xend=dist2(idx2)/100;%fin du profil considéré%
     
                     %création et sauvegarde du fichier .mat dans le répertoire raw%
                    pr10=struct('dist2',dist2,'provo2',provo2,'provoNo',provoNo,'testNm',testNm,'xbegin',xbegin,'xend',xend);
                    save(fullfile(dir,num2str(date1(b)),'raw','pr10.mat'),'dist2','provo2','provoNo','testNm','xbegin','xend','pr10');
     
                    BTT(2,10,dirread1,dirread2,dirread3)
     
                 end
                 clear diffmax diffmin dirread1 dirread2 dirread3 pr10 testNm xbegin xend dist2 provo2 provoNo    
        end
    end
    Avez-vous une idée d'où cela peut-il provenir? Sachant que dans la direction mentionnée dans le message d'erreur il y a bien un fichier pr10.mat qui s'est créé. Peut-être cela vient de ma boucle car ce symbole apparait dans le chemin d'accès \￿\

    Merci d'avance pour vos lumières.

    Cordialement

    Géomorph

  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 317
    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 317
    Par défaut
    N'aurais-tu pas oublié d'utiliser num2str(date1(b)) dans les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dirread1=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long', profil, ['output' num2str(a) '\'], date1(b), 'raw\');
    dirread2=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long', profil, ['output' num2str(a) '\'], date1(b), 'raw\');
    dirread3=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long', profil, ['output' num2str(a) '\'], date1(b), 'results\');
    Sinon, que renvoi ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    profil = 'P10';
    matfile = 'pr10';
     
    date1 = load(fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long\', profil, 'date.txt'));
     
    whos date1
    Évite d'utiliser dir comme nom de variable car c'est déjà le nom d'une fonction MATLAB.

    Tu devrais mettre le chemin 'E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long' dans une variable, cela améliorerait la lisibilité de ton code.

    Pour finir, tu n'as pas besoin de spécifier les séparateurs dans les chemins construits avec fullfile (c'est l'intérêt même de cette fonction) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dirread1=fullfile('E:\R-TEMUS\2_donnees\RTEMUS\Dune_tracking\4_traitement_découpage_long', profil, ['output' num2str(a)], date1(b), 'raw');

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2018
    Messages : 5
    Par défaut
    Bonjour Jérome,

    Merci pour ta réponse. J'avais effectivement oublié le num2str dans ces 3 lignes. J'avais le nez dans le script depuis trop longtemps pour mon rendre compte.

    Merci pour les conseils sur la lisibilité de mon script, j'applique de suite.

    Question subsidiaire : le dernier programme que je lance dans ma boucle (BTT) me renvoi parfois des erreurs dues aux fichiers que je rentre et après cette erreur il stoppe la boucle de mon script.
    Comment pourrais-je faire pour inclure dans mon script, si BTT renvoie une erreur, continuer la boucle et mentionner dans un fichier txt que la boucle complète n'a pas été effectuée si tel est le cas?

    Cordialement.

    Géomorph

  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 317
    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 317
    Par défaut
    Citation Envoyé par geomorph Voir le message
    Comment pourrais-je faire pour inclure dans mon script, si BTT renvoie une erreur, continuer la boucle et mentionner dans un fichier txt que la boucle complète n'a pas été effectuée si tel est le cas?
    Difficile de te donner une solution précise sans en savoir plus sur ce qui fait échouer la fonction BTT…

    L'idéal serait de gérer l'erreur à l'intérieur de la fonction et de renvoyer un booléen pour indiquer le succès ou l'échec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function success = BTT()
     
    % Code de la fonction BTT
     
    success = true; % ou false selon le déroulement du code
    Puis dans le code principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for n = 1:8
     
        success = BTT();
     
        if success==false
            fid = fopen('BTTerrors.log', 'at');
            fprintf(fid, 'Echec boucle %d\n', n);
            fclose(fid);
            continue
        end    
     
    end
    Tu peux également utiliser un try-catch pour gérer l'erreur de manière plus globale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for n = 1:8
     
        try
            BTT();
        catch
            fid = fopen('BTTerrors.log', 'at');
            fprintf(fid, 'Echec boucle %d\n', n);
            fclose(fid);
            continue
        end    
     
    end

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Juin 2018
    Messages : 5
    Par défaut
    c'est exactement ça que je voudrais faire.

    voici la fraction du script de la fonction BTT concernée par les erreurs que je souhaite mentionner :

    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
    29
    crossings = [upcross; downcross];
                crossings = sortrows(crossings,1);
    
                   function success= BTT()
                   
                if ((length(upcross) > 0) & (length(downcross) > 0))
                    if (length(upcross(:,1)) == length(downcross(:,1))) | (length(upcross(:,1)) == length(downcross(:,1))+1) | (length(upcross(:,1)) == length(downcross(:,1))-1) % OK
                    else error('The amount of upcrossings does not agree with the amount of downcrossings!')
                         
                         success = false
                    end
                end
                if crossings(1,3) == 1 % eerste element is een upcrossing
                    for i=1:2:length(crossings(:,1))-1
                        if crossings(i+1,3) - crossings(i,3) == 1 % na 2 (down) moet een 1 (up) komen, dus verschil moet 1 zijn
                        else error('1e = upcrossing: er gaat iets mis, want up- en downcrossings komen niet om-en-om voor!')
                             
                             success = false
                        end
                    end
                elseif crossings(1,3) == 2 % eerste element is een downcrossing
                    for i=1:2:length(crossings(:,1))-1
                        if crossings(i,3) - crossings(i+1,3) == 1 % na 2 (down) moet een 1 (up) komen, dus verschil moet 1 zijn
                        else error('1e = downcrossing: er gaat iets mis, want up- en downcrossings komen niet om-en-om voor!')
                            
                             success = false
                        end
                    end
                end
    Le problème est que la première ligne de cette fonction BTT est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [BTT] = BTT(provoloc,provoNos,dirread1,dirread2,dirread3,apf1,apf2)
    et que si j'ajoute avant cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function success= BTT()
    j'ai l'erreur suivante qui apparaît
    'The current use of 'BTT' is inconsistent with its previous use or definition'

  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 317
    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 317
    Par défaut
    Citation Envoyé par geomorph Voir le message
    Le problème est que la première ligne de cette fonction BTT est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [BTT] = BTT(provoloc,provoNos,dirread1,dirread2,dirread3,apf1,apf2)
    À quoi correspond l'argument de sortie [BTT] ? Sans doute à rien puisque tu ne t'en sers pas dans le code principal.

    L'entête devrait plutôt être comme ceci, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function BTT(provoloc,provoNos,dirread1,dirread2,dirread3,apf1,apf2)
    Si c'est le cas, tu ajoutes juste l'argument de sortie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function success = BTT(provoloc,provoNos,dirread1,dirread2,dirread3,apf1,apf2)
    Pour gérer plus finement l'erreur, tu peux aussi faire (si j'ai bien compris) :

    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
    29
    30
    31
    32
    33
    34
    35
    function [success, msg] = BTT(provoloc,provoNos,dirread1,dirread2,dirread3,apf1,apf2)
     
    success = true;
    msg = '';
     
    crossings = [upcross; downcross];
    crossings = sortrows(crossings,1);
     
    if ((length(upcross) > 0) & (length(downcross) > 0))
        if (length(upcross(:,1)) == length(downcross(:,1))) | (length(upcross(:,1)) == length(downcross(:,1))+1) | (length(upcross(:,1)) == length(downcross(:,1))-1) % OK
        else
            msg = 'The amount of upcrossings does not agree with the amount of downcrossings!';
            success = false;
            return
        end
    end
    if crossings(1,3) == 1 % eerste element is een upcrossing
        for i=1:2:length(crossings(:,1))-1
            if crossings(i+1,3) - crossings(i,3) == 1 % na 2 (down) moet een 1 (up) komen, dus verschil moet 1 zijn
            else
                msg = '1e = upcrossing: er gaat iets mis, want up- en downcrossings komen niet om-en-om voor!';
                success = false;
                return
            end
        end
    elseif crossings(1,3) == 2 % eerste element is een downcrossing
        for i=1:2:length(crossings(:,1))-1
            if crossings(i,3) - crossings(i+1,3) == 1 % na 2 (down) moet een 1 (up) komen, dus verschil moet 1 zijn
            else
                msg = '1e = downcrossing: er gaat iets mis, want up- en downcrossings komen niet om-en-om voor!';
                success = false;
                return
            end
        end
    end
    Puis dans le code principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for n = 1:8
     
        [success, msg] = BTT(2,10,dirread1,dirread2,dirread3);
     
        if success==false
            fid = fopen('BTTerrors.log', 'at');
            fprintf(fid, 'Echec boucle %d : %s\n', n, msg);
            fclose(fid);
            continue
        end    
     
    end

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

Discussions similaires

  1. Error using ''fft'' (out of memory ?)
    Par salimilas dans le forum MATLAB
    Réponses: 1
    Dernier message: 21/05/2007, 15h35
  2. Réponses: 9
    Dernier message: 08/03/2007, 14h26
  3. [installation 9i] error while loading shared library
    Par ChristopheH dans le forum Installation
    Réponses: 3
    Dernier message: 19/07/2006, 17h36
  4. Réponses: 2
    Dernier message: 05/02/2004, 13h58

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