2010-02-28 3 views
-2

Après avoir posé cette question:Erreur Matlab: ??? contenu de la cellule de référence à partir d'un objet tableau non cellules

how I can read the following files using the for loop: (can the loop ignore the characters in filenames?)

abc-1.TXT cde-2.TXT ser-3.TXT
wsz-4.TXT aqz-5.TXT iop-6.TXT
...

(In fact, I have 500 files)

What do I have to add at the beginning of this loop ??

for i = 1:1:500
nom_fichier = strcat(['MyFile.......' num2str(i) '.TXT']);

J'ai essayé la solution suivante:

Names = dir('MyFile\*.TXT'); 

for i = 1:500 
    fn = ['MyFile',filesep,Names{i},'-',num2str(i),'.TXT']; 
    data = load(fn);  
    ..... 

Après l'exécution du programme, je suis l'erreur suivante:

??? Cell contents reference from a non-cell array object.  

Pouvez-vous m'aider à résoudre ce problème. mon but est de lire le contenu de 500 fichiers.

+0

Avez-vous besoin de les lire selon un modèle de nom de fichier spécifique? Ou serait la lecture, disons, tous les fichiers dans un répertoire suffisant? – tzaman

+0

Je veux les lire dans l'ordre des nombres dans les noms de fichiers – Matlab09

Répondre

5

Vous essayez de reconstituer une solution sans penser à ce que vous faites.

Vous devez regarder et comprendre ce que dir renvoie.

Names = dir('MyFile\*.TXT'); 

Renvoie une structure. Voyez que l'un des champs de cette structure est un champ de nom. Donc, essayez ceci:

Names(1).name 
ans = 
    abc-1.TXT 

Voir que ce sera le nom complet d'un fichier, sans avoir besoin de construire. Vous pouvez maintenant mettre une boucle autour de cette structure,

for i = 1:numel(Names) 
    data = load(Names(i).name); 

    % do stuff here... 
end 

Si vous voulez la liste des noms seulement ici en tant que réseau de cellules, faites ceci suivant:

Names = {Names.name}; 

Maintenant, regardez ce qui est en cette variable. C'est un tableau de cellules maintenant. N'essayez pas de l'utiliser aveuglément sans réfléchir. Ce sera une liste des noms complets de chaque fichier txt dans ce répertoire. Vous n'avez plus besoin de créer le nom. Utilisez simplement load sur chaque nom de fichier.

+0

Ok, merci "Woodchips". Pourriez-vous me dire comment je peux les lire dans l'ordre des nombres dans les noms de fichiers – Matlab09

+0

Le programme suivant fonctionne bien: Names = dir ('MyFile \ *. TXT'); pour i = 1: 500 fn = strcat (['MyFile \' Noms (i) .nom]); ... mais l'ordre des résultats obtenus ne suivent pas l'ordre des numéros dans les noms de fichiers – Matlab09

+0

Ensuite, vous devez faire une sorte de noms de fichiers, AVANT de lire les fichiers. Ou si vous connaissez déjà le noms des fichiers à l'exception du modificateur numérique, puis les créer à la volée comme cela a été discuté. –

Questions connexes