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 :

Enlever valeurs nulles d'une boucle avec condition


Sujet :

MATLAB

  1. #21
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Tu peux poster ou m'envoyer un fichier vide et le 53eme fichier ?

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Désolé je ne comprend pas trop quels fichiers.

    ça se présente comme ça :

    Nom : Capture d’écran 2014-07-22 à 13.29.19.png
Affichages : 92
Taille : 32,6 Ko

    Dès que la condition n'est pas remplie, j'ai des valeurs vides.

    même en modifiant le code ainsi :

    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
    Exposition_Raf=struct;
    for j = 1:size(nom_fichier,1) %taille de l'echantillon
     
     
     
        for i = 1:numel(Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(:,5)) %taille de l'echantion
     
     
     
     
                if ne(strcmp('GLOBAL',Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(i,5)), 0) %Condition si la valeur est Global
                Var1 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(i,4); %Ensemble de variable à copier
                Var2 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).data(i,1);
                Var3 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).data(i,2);
                if ne(isempty(Var1),1)
                Exposition_Raf.([Type_dossier nom_fichier(j,:)])(i,:) = [Var1 Var2 Var3];
     
                end  
                end
     
     
        end
     
    end

  3. #23
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Je pensais au fichier, pas au cell résultant

    Que donne size(Var1{1}) en debug ?

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Je test ça, mais le fichier source je te l'envoie en MP.

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Toujours après la 53ème valeur :

    size(Var1{1}) renvoi pour tout les i.
    ans =

    1 6

    avant rien. et après ça varie entre 6 et 12

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Nom : Capture d’écran 2014-07-22 à 13.54.09.png
Affichages : 124
Taille : 20,5 Ko

    Le problème c'est que le fichier, fait 35 mo, donc difficile à héberger.

    En fait là on voit bien que la 52ème valeur est "Bilan" donc ne respecte pas la condition, mais la 53ème est "Global" donc respecte la condition et là j'a des valeurs.

  7. #27
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Tu peux toujours traiter le cell a posteriori en enlevant les [], mais ca serait mieux de comprendre

  8. #28
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par VV33D Voir le message
    Tu peux toujours traiter le cell a posteriori en enlevant les [], mais ca serait mieux de comprendre
    Lol comme tu l'as remarqué je suis débutant, donc depuis 2 jours je galère et j'avoue que je comprend pas.

    J'ai peur d'avoir des décalages en enlevant les [] mais aussi je n'arrive pas à vraiment à le faire avec des fichier "structures" à chaque fois que je le vois c'est pour des matrices.

    Et quand j'essaie de le mettre dans ma boucle ça passe pas.

  9. #29
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Si tu laisses 'i' c'est normal. Il faut mettre end+1.

    Quand je mets end+1 au lieu de i ça me mets :
    Reference to non-existent field 'NY20131213'.
    il faut initialiser la matrice
    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
    Exposition_Raf=struct;
    for j = 1:size(nom_fichier,1) %taille de l'echantillon
        Exposition_Raf.([Type_dossier nom_fichier(j,:)])= {};
        for i = 1:numel(Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(:,5)) %taille de l'echantion
                if ne(strcmp('GLOBAL',Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(i,5)), 0) %Condition si la valeur est Global
                    Var1 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(i,4); %Ensemble de variable à copier
                    Var2 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).data(i,1);
                    Var3 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).data(i,2);
                    if ne(isempty(Var1),1)
                        Exposition_Raf.([Type_dossier nom_fichier(j,:)])(end+1,:) = [Var1 Var2 Var3];           
                    end  
                end                     
        end
    end

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    finalement, j'ai résolu ça assez simplement :

    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
    Exposition_Raf=struct;
    k=1;
    for j = 1:size(nom_fichier,1) %taille de l'echantillon
        
        
       
        for i = 1:numel(Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(:,5)) %taille de l'echantion
                
            
          
               
                if ne(strcmp('GLOBAL',Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(i,5)), 0) %Condition si la valeur est Global
                Var1 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).textdata(i,4); %Ensemble de variable à copier
                Var2 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).data(i,1);
                Var3 = Exposition_brut.([Type_dossier nom_fichier(j,:)]).data(i,2);
                if ne(isempty(Var1),1)
                Exposition_Raf.([Type_dossier nom_fichier(j,:)])(k,:) = [Var1 Var2 Var3];
                k=k+1;
                end  
                end
              
             
        end
       
    end
    Merci pour ton aide

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Encore mieux ta méthode !!!!

    Un énorme merci

  12. #32
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    De rien.

    Normalement, la boucle interne est 'inutile' et peut être traitée de manière vectorisée.

  13. #33
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Je me permets de demander encore un peu d'aide, car je ne vois pas comment traiter le problème.
    J'ai des fichiers qui on plusieurs dates (working days). Par exemple, en rouge il y'a 3 jours de sauts.

    nom_fichier =
    20131213

    et moi j'ai une liste de fichier :

    20131213
    20131214
    20131215
    20131218
    20131219
    20131220
    20131221

    Donc pour l'ouvrir, moi j'ai fait une boucle du type :

    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
     
    start_date = '20131213'; %Utilisateur entre la date de début de la série 
    end_date = '20131219'; %Entre la date de fin 
     
    dts= datenum(start_date,'yyyymmdd') : 1 : datenum(end_date,'yyyymmdd'); %Converti les séries en date 
    nom_fichier= datestr(dts,'yyyymmdd'); %Repasse les séries en string 
     
    Exposition=[];
     
    loaded_datas= {};
    for i = 1:size(nom_fichier,1)%Nombre de jours dans la liste nom_fichier 
    date_expos_fichier_selectionne=nom_fichier(i,:); %Stock le nom du fichier pour la date 
    Exposition_Utilisateur.([Type_dossier date_expos_fichier_selectionne])  = Exposition_Raf.([Type_dossier date_expos_fichier_selectionne]); %Ouvre le fichier ayant la date selectionnée 
     
    end
    Le problème c'est que ça décale de 1 jours, donc évidement arriver à 20131216 il me dit que le fichier n'existe pas.

    Et là je vois pas vraiment comment régler ce problème.

  14. #34
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Test si le fichier existe avant de l'ouvrir (doc exists)

    L'autre solution aurait été de lister les fichiers dans ton répertoire plutôt que de parcourir toutes les dates possibles.

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    En fait je stock les nom de fichier.

    Le problème vient de la boucle pour l'utilisateur.

    Si je lui dit de rentrer tout les nom de fichier qu'il veut à la main, il à pas fini.

    je souhaite qu'il puisse rentrer la date de départ, et la date d'arrivé et que matlab déterminent toutes les dates intermédiaires, pour ensuite les appeler.

    Mais je souhaiterais qu'il les détermine non pas en décalant de 1 jours, mais en prenant uniquement les workings days.

  16. #36
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    pour avoir le nombre de working day :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Days = wrkdydif(StartDate, EndDate, Holidays)
    Mais je trouve pas de commande qui les listerais dans un fichier.

    Ou alors il faudrait que lorsque l'utilisateur entre une date de départ, et une date de fun, ça identifie dans le vecteur contenant les dates de quand à quand il faut aller. Mais ça me semble peu réalisable

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 200
    Points : 46
    Points
    46
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dts1= datenum(start_date,'yyyymmdd');
    dts2= datenum(end_date,'yyyymmdd');
    bdates = busdays(dts1, dts2, 'DAILY'); 
    dates_fichier= datestr(bdates,'yyyymmdd');
    Si ça peut aider.

  18. #38
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    je souhaiterais qu'il les détermine non pas en décalant de 1 jours, mais en prenant uniquement les workings days.
    Ou ceux existants ?

    Sinon, plus propre:
    1/ Liste tous les fichiers existant dans le répertoire
    2/ Filtre par dates utilisateurs et working day
    3/ Traitement

Discussions similaires

  1. [E07] erreur sur une boucle avec condition
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/03/2009, 14h59
  2. Réponses: 2
    Dernier message: 26/01/2009, 15h38
  3. Update dans une boucle avec valeur incrémentale
    Par framus.class dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/09/2008, 11h19
  4. Créer une boucle avec condition
    Par mfontan dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/06/2008, 17h14
  5. Valeur Null dans une condition
    Par jmde dans le forum VBA Access
    Réponses: 8
    Dernier message: 29/07/2007, 04h48

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