Extraire l'extension avec Matlab

Fermé
julienlali Messages postés 6 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 17 mars 2011 - 17 mars 2011 à 02:02
khunlun Messages postés 117 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 17 avril 2012 - 18 mars 2011 à 11:03
Bonjour,
Je parcours l'internet depuis deux jours...
J'suis pas doué en prog...
J'arrive toujours pas à mettre en variables les extensions des fichiers de mon dossier.



Je fais la liste avec A=ls :

>> A'

ans =

.
..
QS_XWGRD3_2004133.20063172214
QS_XWGRD3_2004134.20063172214
QS_XWGRD3_2004135.20063172215
QS_XWGRD3_2004136.20063172216

Ce qui m'intéresse c'est de stocker ce qu'il y a après le point.
Bien que le nombre de caractère reste fixe, j'y arrive pas.



%---------------------------------------
monfichier = fopen('liste.txt','w+');
fprintf(monfichier, '%s' , A);
fclose(monfichier);
%---------------------------------------
Il me sort donc un fichier liste.txt avec tous les noms sur la même ligne sans séparation...
J'vous montre un extrait:
. .. QS_XWGRD3_2004133.20063172214QS_XWGRD3_2004134.20063172214

En fait j'arrive à sortir
[E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] = textread('liste.txt',...
'%29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s');

Et alors tous mes noms de fichiers sont associés à une variable, mais selon le dossier, le nombre de fichier devrait varier (de 1:size(ls,1)-2)

Une solution à mon casse-tête ?
A voir également:

11 réponses

khunlun Messages postés 117 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 17 avril 2012 27
Modifié par khunlun le 17/03/2011 à 08:50
Bonjour,

Je te propose ça :

path est le dossier contenant les fichiers à traiter.

fid = fopen('monFichier.txt','w+');
entities = dir('.');
for it = 1 : size(entities,1)
% si l'entité est un dossier, on passe à la suivante
if entities(it).isdir
continue;
end

currentFile = entities(it).name;
ind = strfind(currentFile,'.');
fprintf(fid,'%s\n',currentFile(1,ind(end)+1:end));
end
fclose(fid);

Le fichier monFichier.txt contient toutes les chaines de caractère se trouvant après le point.

Bonne journée.
1
khunlun Messages postés 117 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 17 avril 2012 27
17 mars 2011 à 18:46
Alors pour le traitement, je te propose ça :

fid = fopen('liste.txt','r');
while ~feof(fid)

currentLine = fgetl(fid);

** traitement de l'extension **

end

fclose(fid);
1
julienlali Messages postés 6 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 17 mars 2011
Modifié par julienlali le 17/03/2011 à 18:40
Wa !
Ça c'est super.
T'as raison, on se retrouve avec une fichier .txt où sont toutes les extensions séparées d'un 'retour'.
C'est déjà mieux que ce que j'obtenais, c'est-à-dire les noms au complet.

************************
IL ME RESTE UN PROBLÈME !!!
************************

Il me reste à stocker chaque extension ensuite, dans le but de les invoquer plus tard.
Comme le nombre d'extension varie, et que certain dossiers contiennent 200 fichiers, je ne veux pas garder cette fonction Textread que j'utilise actuellement !

[E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T] = textread('liste.txt',...
'%29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s %29s');

Ça, c'est bon quand t'as seulement quelques fichiers, mais pour 200 c'est pas bon ! Surtout que la cardinalité varie....

Qu'est-ce que je peux faire pour ça !?

Merci de votre aide encore !!
0
khunlun Messages postés 117 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 17 avril 2012 27
17 mars 2011 à 18:34
De rien, ça me fait plaisir ! ^^
Content d'avoir pu servir.

Si tu as des questions ou d'autres problèmes, pas de soucis.

Bonne soirée
0

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

Posez votre question
julienlali Messages postés 6 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 17 mars 2011
17 mars 2011 à 18:41
Je me suis mal exprimé je pense, mais j'ai fait un update ...
MERCI !
0
julienlali Messages postés 6 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 17 mars 2011
17 mars 2011 à 19:07
Bah t'es extra toi !
T'es en train de tout résoudre mon truc !

J'ai jamais suivi de cours Matlab et les concepts exprimés dans le Help sont un peu lourd parfois...

**************************

Il me resterait finalement à assigner une variable à chaque extension.

Parce que quand j'écris:

X=currentLine

Il me sort:

X =
20063172221

X =
20063172222

X =
20063172222

....
Ainsi de suite, ne me laissant pour valeur de X que la valeur de la dernière extension.

Alors si je pouvais avoir genre
X1= 20063172221
X2=20063172222
...

Ce serait réglé !

Merci l'ami ! C'est vraiment apprécié !
0
khunlun Messages postés 117 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 17 avril 2012 27
17 mars 2011 à 19:10
Si tu veux juste afficher ce qu'il y a dans le fichier, voila ce que tu peux faire

it = 1;
fid = fopen('liste.txt','r');
while ~feof(fid)
fprintf(1,'X%d = %s\n',cpt,fgetl(fid));
it = it+1;
end
fclose(fid);

Ca devrait faire le boulot je pense.

Bonne chance
0
julienlali Messages postés 6 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 17 mars 2011
17 mars 2011 à 19:36
Hahah !
Exact !

J'ai changé cpt pour it et c'est top.

Je fais parcontre face à 2 problèmes:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Il me donne X1 = 20063172214 pour la première, et c'est parfait.
Il me donne X = 20063172214 pour la deuxième !
Il me donne X2 = 20063172215 pour la troisième,
Il me donne X = 20063172216 pour la quatrième !
....

J'ai donc seulement la moitié des valeurs qui ont Xi d'attribué.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Et mon autre problème, c'est que je ne peux pas invoquer X1 par la suite !
C'est comme si il l'avait juste affiché, mais qu'il n'était pas stocké ...



Super cool merci !
0
khunlun Messages postés 117 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 17 avril 2012 27
17 mars 2011 à 19:44
Oui it et pas cpt, au temps pour moi...

Si tu veux les garder pour les utiliser dans un autre programme, tu as deux solutions.

La première est de lite le fichier liste dans ce deuxième programme pour avoir les données sous la main.

Sinon tu peux faire un truc dans le style

function res = MaFonction(inStr)
res = ''; % deux simple quote (touche 4) et pas un double (touche 3)
it = 1;
fid = fopen(inStr,'r');
while ~feof(fid)
res.x(it) = fgetl(fid);
it = it+1;
end
fclose(fid);


Ensuite, tu l'utilise comme suit

donnee = MaFonction('liste.txt');

et tu aura

donnee.x1
donnee.x2
etc

Si tu veux faire un traitement automatique, tu peux passer par fields(donnee), mais c'est une autre histoire. :)

Bonne soirée
0
julienlali Messages postés 6 Date d'inscription jeudi 17 mars 2011 Statut Membre Dernière intervention 17 mars 2011
17 mars 2011 à 20:14
Nope, là tu m'as perdu....
(inStr) c'est un input que t'as défini préalablement ou bien ?
Il veut rien savoir de compiler function res = MaFonction(inStr) .

Bon, je reprends.
Quand je fais ce que tu dis dans le message d'avant, j'obtiens:

X1 = 20063172214
X2 = 20063172216
X3 = 20063172219
X4 = 20063172220
X5 = 20063172221
X6 = 20063172222
X7 = 20063172223

C'est-à-dire, exactement la moitié des extensions, en sautant la première, la troisième, la cinquième, ....
Moi, je les prendrais toutes si je pouvais... (1 à 14)

Et je dois pouvoir invoquer X1 par la suite, et qu'il me sorte genre:

>> X1

X1 =

20063172214

Pas évident tout ça, j'suis complètement perdu !
Merci
0
khunlun Messages postés 117 Date d'inscription mardi 12 avril 2005 Statut Membre Dernière intervention 17 avril 2012 27
18 mars 2011 à 11:03
Je ne comprend ce que tu veux dire par compiler ?
Tu as des trucs soulignés en rouge ?

Tu créé un fichier MaFonction.m contenant les lignes suivantes:

function res = MaFonction(inStr)
it = 1;
fid = fopen(inStr,'r');
while ~feof(fid)
str = sprintf('x%d',it);
res.(str) = fgetl(fid);
it = it+1;
end
fclose(fid);


Ensuite dans la console tu tapes


>> donnee=MaFonction('liste.txt');
>> donnee.x1

Ca ne marche pas ?
J'ai testé de mon côté et ça marche

Si tu as un soucis, je t'enverrai ca par mail

Bonne journée
0