2015-12-29 2 views
2

Я пытаюсь добавить имена файлов в каталог в список для последующей обработки. Код ниже не работает.Создайте список и добавьте имена файлов в этот список

files = dir(fullfile(home,'*.csv')); 
files = {files.name}';      %'# file names 

symbolsList = []; 

filedata = cell(numel(files),1);    %# store file contents 
for i=1:numel(files) 
    [pathstr,name,ext] = fileparts(files{i}); 
    symbolsList(end + 1) = name; % THIS GIVES ERROR 
end 

ответ

3

В коде symbolsList будет интерпретироваться как массив символов. Утверждение, в котором появляется ошибка, интерпретируется как добавление одного символа к symbolsList. Вероятно, вы получаете несоответствие выравнивания индексов, потому что имя, скорее всего, имеет более одного символа, но вы пытаетесь вместить много символов в одно место в этом массиве символов. Это, вероятно, не то, что вы хотите.

Вы хотите, чтобы каждое «пространство» имело имя. Потому что каждое имя, скорее всего, не имеют одинаковое количество символов, вы, вероятно, следует использовать массив ячеек вместо:

files = dir(fullfile(home,'*.csv')); 
files = {files.name}';      %'# file names 

symbolsList = cell(numel(files),1); %// Change 

filedata = cell(numel(files),1);    %# store file contents 
for i=1:numel(files) 
    [pathstr,name,ext] = fileparts(files{i}); 
    symbolsList{i} = name; %// Change 
end 

Примите к сведению, что я предварительно выделен массив ячеек и для каждого файла, который вы хотите посмотреть at, я проиндексировал в правую ячейку и разместил там имя. Это предпочтительнее конкатенации в первую очередь из-за эффективности. Для доступа к я го имя, просто сделать:

name_to_choose = symbolsList{i}; 

Minor Примечание

filedata в коде не используется вообще нигде. Вы уверены, что вставили весь свой код?

Смежные вопросы