[MATLAB] Boucle IF

Résolu/Fermé
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 - 8 avril 2009 à 17:06
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 - 10 avril 2009 à 11:46
Bonjour,

question toute bête :

si on a une boucle

----------------
if cas1
blablbalba
elseif cas 2
blablba
elseif cas 3
blablba
end
--------------------

Si une variable est en accord avec cas1 et cas3 par exemple, il rentre dans les deux if? et non que dans le 1er et s'arrete ??

Merci

12 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
8 avril 2009 à 17:36
Oui, ba dans ce cas, ce n'est pas MATLAB que j'accuserai d'être con.
Lit la documentation de fopen() tu devrai trouver ton bonheur !
3
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 24
8 avril 2009 à 17:14
D'abord Ok
et ensuite, MERCI
mais le pb qui se pose alors c'est que quand j'en mets plusieurs comme dans cet exemple de structure :

--------------------------------------------------

fopen fichier

if
end

if
end

fclose(fid)
--------------------------------------------------

Il me met un erreur dans la fermeture du fichier...
1
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
8 avril 2009 à 17:08
Salut,

D'abord, if n'est pas une boucle, mais un test !
Et ensuite, il me semble que non, il n'y rentre pas. Il s'arrête dès qu'il trouve une condition vraie.
Si tu veux qu'il rentre dans chaque if, il faut faire un if et un end pour chaque cas.
0
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
8 avril 2009 à 17:18
De rien !
Have fun !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 24
8 avril 2009 à 17:20
j'ai edit mon dernier post.. une idée?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
8 avril 2009 à 17:23
ça depend peut être de ce que tu fait dans tes if.
Si tu lit plusieurs fois le fichier alors que tu n'as pas le droit ou un truc dans le genre.
C'EST QUOI L'ERREUR ???
0
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 24
8 avril 2009 à 17:30
Pfff en faite j'ai comprit, putain il est con ce matlab

en faite dans les if, je fait des écritures de fichier donc évidemment je les ferme ensuite du style :

--------------------------------------------------

fopen fichier

if blabla
fopen('blblba.txt,'wt')
fprintf blbalba
fclose(fid)
end

if
fopen('blblba.txt,'wt')
fprintf blbalba
fclose(fid)
end

fclose(fid)
--------------------------------------------------
Donc il mélange tous les fids

moyen pour un chaque fopen de lui inclure un numéro de fid pour qu'il se gourre pas ???

Merci !
0
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 24
8 avril 2009 à 17:50
Hum passons sur l'allusion sarcastique dont je pressentais la venue.

J'ai bien sûr fait un help fopen, mis à part que tout ça est écrit dans un dialecte anglo-saxon indéchiffrable, je n'ai rien trouvé qui puisse m'aider. Je ne vois pas quel argument utilisé dans mon cas.

pffffiou .
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 avril 2009 à 09:31
? 8-O
met ton code réel concernant la gestion ouverture fermeture de fichier.
0
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 24
9 avril 2009 à 11:04
ok j'en ai enlevé la moitié

-----------------------------------------------
--------------DEBUT PROGRAMME---------
-----------------------------------------------

for i = an_deb:an_fin;
for j = mois_deb:mois_fin;
for k = jour_deb:jour_fin;
for l = heure_deb:heure_fin;
try

dossierCourant = fullfile(num2str(i,'%02d'),num2str(j,'%02d'),num2str(k,'%02d'),num2str(l,'%02d'));

fichier = dir(fullfile(Directory_source,dossierCourant,'\*.pro'));


%%%%%%%%%%%%%% Boucle: Lecture de tous les fichiers du dossier %%%%%%%%%%%
for p=1:size(fichier,1);

fid=fopen(fullfile(Directory_source,dossierCourant,fichier(p).name),'r');
disp(fid)
%%%%%%%%%%%%%% Lecture des Données voulues %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fseek(fid,312,'bof');
duree_avant = fread(fid,1,'single');
[...]

%%%%%%%%%%%%%% Lecture des voies 1 et voies 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%
fseek(fid,premiere,'bof');
voie1 = fread(fid,nombre_echant,'int16');
size(voie1);
fseek(fid,premiere+decalage,'bof');
voie2 = fread(fid,nombre_echant,'int16');
size(voie2);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Corrélation entre voie 1 et voie 2 %%%%%%%%%
Correl = corr2(voie1, voie2);

%%%%%%%%%%%%%%%%%%%%CONDITION%%%%%%%%%%%%%%%%%%%%
if ( Correl > -1 & Correl < 0.0001 );
compteur_corr_bruit_neg = compteur_corr_bruit_neg + 1
fid = fopen('fichiers negatifs.txt','at');
fprintf(fid,'%s\n',fichier(p).name);
fclose(fid);

elseif( Correl > 0.000001 & Correl < 1 );
compteur_corr_95_1_neg = compteur_corr_95_1_neg + 1
fid = fopen('fichiers positifs.txt','at');
fprintf(fid,'%s\n',fichier(p).name);
fclose(fid)
end



if ( (abs(Correl) > 0.5) & (abs(Correl) < 0.6) );
fid = fopen('fichiers_correl_05_06.txt','at');
fprintf(fid,'%s\n',fichier(p).name);
fclose(fid);
compteur_correl_05_a_06 = compteur_correl_05_a_06 +1 ;

elseif ( (abs(Correl) > 0.9) & (abs(Correl) < 0.95) );
fid = fopen('fichiers_correl_09_95.txt','at');
fprintf(fid,'%s\n',fichier(p).name);
fclose(fid);
compteur_correl_09_a_095 = compteur_correl_09_a_095 +1 ;

elseif ( (abs(Correl) > 0.95) & (abs(Correl) < 1) );

if ( (abs(Correl) > 0.95) & (abs(Correl) < 0.97) );
compteur_correl_95_a_97 = compteur_correl_95_a_97 +1 ;
fid = fopen('fichiers_correl_95_97.txt','at');
fprintf(fid,'%s\n',fichier(p).name);
fclose(fid);
elseif ( (abs(Correl) > 0.97) & (abs(Correl) < 1) );
compteur_correl_97_a_1 = compteur_correl_97_a_1 +1 ;
end
end


fclose(fid) ;


end; %end de for


end; % de try


end
end
end
end
-----------------------------------------------
--------------FIN PROGRAMME--------------
-----------------------------------------------

Merci
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 avril 2009 à 11:21
Oui, j'ai espéré, mais c'est bien ce que je pensais... MATLAB n'est vraiment pas en cause.
en gros tu fais (si j'ai bien lu) :
fid=fopen("fichier1");
[...]
if([...])
fid=fopen("fichier2");
fclose(fid);
endif
[...]
fclose(fid);
Ok?
Tu es bien daccord que la valeur renvoyé par fopen("fichier1") est stocké dans la variable "fid".
Ensuite, tu stocke dans cette même variable la valeur renvoyé par fopen("fichier2"). Tu perds donc la valeur de fopen("fichier1") !
C'est un peu comme si tu fesais :
a=1;
a=2;
clear a;
et que tu râle car "a" ne contient pas la variable 1.
Bref, il suffit d'uiliser une autre variable pour ta suit de if, "fid_tmp" par exemple.
0
Newenda Messages postés 75 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 26 avril 2021 24
10 avril 2009 à 11:46
Oui désolé pour le dérangement, j'ai vu ma faute honteuse après coup.

Merci
0