Tu peux poster ou m'envoyer un fichier vide et le 53eme fichier ?
Tu peux poster ou m'envoyer un fichier vide et le 53eme fichier ?
Désolé je ne comprend pas trop quels fichiers.
ça se présente comme ça :
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
Je pensais au fichier, pas au cell résultant
Que donne size(Var1{1}) en debug ?
Je test ça, mais le fichier source je te l'envoie en MP.
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
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.
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.
Si tu laisses 'i' c'est normal. Il faut mettre end+1.
il faut initialiser la matriceQuand je mets end+1 au lieu de i ça me mets :
Reference to non-existent field 'NY20131213'.
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
finalement, j'ai résolu ça assez simplement :
Merci pour ton aide
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
De rien.
Normalement, la boucle interne est 'inutile' et peut être traitée de manière vectorisée.
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 :
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.
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
Et là je vois pas vraiment comment régler ce problème.
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part doc dir
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.
pour avoir le nombre de working day :
Mais je trouve pas de commande qui les listerais dans un fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Days = wrkdydif(StartDate, EndDate, Holidays)
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
Si ça peut aider.
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');
Ou ceux existants ?je souhaiterais qu'il les détermine non pas en décalant de 1 jours, mais en prenant uniquement les workings days.
Sinon, plus propre:
1/ Liste tous les fichiers existant dans le répertoire
2/ Filtre par dates utilisateurs et working day
3/ Traitement
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager