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 :

condition sur des erreurs


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut condition sur des erreurs
    Bonsoir,

    je me pose une question depuis deux jours et je n'arrive pas à avoir la réponse. Peut-être que vous pourrez m'aider.

    Est-il possible d'utiliser une erreur comme test sur une condition?

    Par exemple, je dois lire 15 fichiers à partir de la ligne 32 et 25 fichiers à partir de la ligne 33 (allez savoir pourquoi il y a un décalage...) et je ne voudrais avoir qu'une seule boucle de lecture sur ces fichiers. Sans oublier que je ne sais pas à l'avance quels fichiers doivent être lu à partir de la ligne 32 ou 33.

    Pont-on faire quelque chose du genre (ca n'est pas vraiment du code, juste une indication)?

    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
     
    test=dlmread(fichier);
    ligne=32;
     
    recup=test(ligne)
    recup_id=recup(1:4);
     
    if erreur(index exceeds matrix dimensions sur recup_id)==1
     
         ligne=33;
     
         for i=ligne:longeur du fichier
     
         recup=test(i)
         recup_id=recup(1:4);
         end
     
    else 
     
         for i=ligne:longeur du fichier
              recup=test(i)
              recup_id=recup(1:4);
         end
    end

  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 830
    Points
    14 830
    Par défaut
    Tu peux peut-être le faire avec un try,catch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try
       recup_id=recup(1:4);
       ligne=32;
    catch
       %erreur
       ligne=33;
    end
    for i=ligne:<longueur du fichier>
         recup=test(i)
         recup_id=recup(1:4);
    end
    Tu es conscient qu'avec ta boucle tu n'auras de toute façon dans recup que la dernière ligne et dans recup_id les 4 1ers caractères de ta dernière ligne....?

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 304
    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 304
    Points : 52 884
    Points
    52 884
    Par défaut
    En gros, ça donne ceci (avec les dernières versions de MATLAB) :

    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
    test=dlmread(fichier);
    ligne=32;
     
    recup=test(ligne)
     
    try
     
        recup_id=recup(1:4);
     
    catch ME
     
        if strcmpi(ME.identifier,'MATLAB:badsubscript')
     
             ligne=33;
     
             for i=ligne:longeur du fichier
     
             recup=test(i)
             recup_id=recup(1:4);
             end
     
        else
     
              for i=ligne:longeur du fichier
              recup=test(i)
              recup_id=recup(1:4);
     
         end
     
     
        end
     
    end
    C'est pour la méthode générale, maintenant, il y a peut être plus simple dans ton cas précis ?

    Pourquoi ne pas tester la taille de la variable "recup_id" avec NUMEL par exemple ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Merci pour vos réponses rapide, je vais essayé ca de suite.

    Je ne peux pas forcément testé la taille de la variable. En fait, l'exemple que j'ai donné est vraiment simple. Et dans mon cas, il n'est pas toujours possible de faire des tests sur les différentes variables d'où l'idée de passer par les messages d'erreurs.

    et oui, je suis conscient que je n'aurais que les 4 premiers caractères de la dernière ligne ^_^ C'était juste un exemple et ca ne reflète pas exactement ce que je fais.

    C'est même un peu plus compliqué puisque j'ai deux boucles qui sont imbriqués les unes dans les autres.

    L'initialisation de "ligne" se faisant avant les boucles...

  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 304
    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 304
    Points : 52 884
    Points
    52 884
    Par défaut
    Pour savoir quel est le message d'erreur à comparer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
     
        <ce qu'on souhaite faire>
     
    catch ME
     
        ME.identifier
     
    end

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    merci beaucoup, ca a l'air de marché.

    En fait, l'architecture de mon programme était plutôt comme ca.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for
     
     ligne=32;
     
        for
          for
             recup_id=recup(1:4);
          end
         end
    end
    et je l'ai remplacé par ceci

    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
     
    for
     
     ligne=32;
     
    try
        for
          for
             recup_id=recup(1:4);
          end
         end
    catch
    ligne=33;
    for
          for
             recup_id=recup(1:4);
          end
         end
    end
    end
    et ca marche

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

Discussions similaires

  1. condition sur des heures
    Par olisan dans le forum Excel
    Réponses: 2
    Dernier message: 03/04/2008, 11h24
  2. Exprimer une condition sur des sous-formulaires.
    Par Julieta dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/12/2007, 15h11
  3. EXCEL SOMME.SI avec condition sur des dates
    Par cfhal dans le forum Excel
    Réponses: 7
    Dernier message: 15/10/2007, 08h21
  4. condition sur des checkbox
    Par bogsy15 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2006, 09h28
  5. Faire des retry sur des erreurs FTP
    Par fejjal dans le forum Réseau
    Réponses: 4
    Dernier message: 15/02/2006, 23h34

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