VIVEZ LE
FOOTBALL !

Posez votre question Signaler

[MATLAB] Boucle IF [Résolu]

Newenda 66Messages postés 1 décembre 2008Date d'inscription - Dernière réponse le 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
Lire la suite 

[MATLAB] Boucle IF »

Suggestions
12 réponses
Réponse
+1
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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...
Ajouter un commentaire
Réponse
+0
moins plus
De rien !
Have fun !
Ajouter un commentaire
Réponse
+0
moins plus
j'ai edit mon dernier post.. une idée?
Ajouter un commentaire
Réponse
+0
moins plus
ç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 ???
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Ajouter un commentaire
Réponse
+0
moins plus
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 .
Ajouter un commentaire
Réponse
+0
moins plus
? 8-O
met ton code réel concernant la gestion ouverture fermeture de fichier.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
Oui désolé pour le dérangement, j'ai vu ma faute honteuse après coup.

Merci
Ajouter un commentaire
Ce document intitulé « [MATLAB] Boucle IF » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?