Ошибка Matlab: ??? Ссылка на содержимое ячейки из объекта массива не из ячейки - PullRequest
0 голосов
/ 28 февраля 2010

Задав этот вопрос:

как я могу читать следующие файлы используя цикл for: (может цикл игнорировать символы в именах файлов?)

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

(На самом деле у меня 500 файлов)

Что я должен добавить в начале этого цикла ??

для i = 1: 1: 500
nom_fichier = strcat (['MyFile .......' num2str (i) '.Txt']);

Я попробовал следующее решение:

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

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

После запуска программы я получил следующую ошибку:

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

Можете ли вы помочь мне решить эту проблему. Моя цель - прочитать содержимое 500 файлов.

1 Ответ

5 голосов
/ 28 февраля 2010

Вы пытаетесь собрать решение, не задумываясь о том, что вы делаете.

Вам нужно посмотреть и понять, что возвращает dir.

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

Возвращает структуру. Посмотрите, что ОДИН из полей этой структуры является полем имени. Итак, попробуйте это:

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

Обратите внимание, что это будет полное имя файла без необходимости его создания. Теперь вы можете поместить цикл вокруг этой структуры,

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

  % do stuff here...
end

Если вы хотите, чтобы список имен только здесь был в виде массива ячеек, сделайте следующее:

Names = {Names.name};

Теперь посмотрите на то, что находится в этой переменной. Теперь это массив ячеек. Не пытайтесь использовать это вслепую, не задумываясь. Это будет список полных имен каждого текстового файла в этом каталоге. Вам больше не нужно придумывать имя. Просто используйте load для каждого имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...