импортировать Excel в Matlab - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть 4 папки в одном каталоге, где каждая папка содержит ~ 19 .xls файлов.Я написал код ниже, чтобы получить имя каждой из папок и имя каждого файла .xls в папках.

path='E:\Practice'; 
folder = path; 
dirListing = dir(folder); 
dirListing=dirListing(3:end);%first 2 are just pointers
for i=1:length(dirListing);
    f{i} = fullfile(path, dirListing(i,1).name);%obtain the name of each folder
    files{i}=dir(fullfile(f{i},'*.xls'));%find the .xls files
    for j=1:length(files{1,i});
        File_Name{1,i}{j,1}=files{1,i}(j,1).name;%find the name of each .xls file
    end
end

Теперь я пытаюсь импортировать данные из Excel в Matlab с помощьюиспользуя xlsread.Я борюсь с тем, чтобы знать, как загрузить данные в Matlab в цикле, где файлы Excel находятся в разных каталогах (разных папках).

Это оставляет мне ячейку 1x4 с именем File_Name, где каждая ячейка ссылаетсяв другую папку, расположенную в «пути», и в каждой ячейке указывается имя электронных таблиц, которые нужно импортировать.Размер ячеек зависит от количества таблиц в каждой папке.

Есть идеи?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Я не уверен, что понимаю вашу проблему, но все, что вам нужно сделать, это объединить строки, которые содержат каталог (f {}) и имя файла.Изменение вашего кода:

for i=1:length(dirListing);
    f{i} = fullfile(path, dirListing(i,1).name);%obtain the name of each folder
    files{i}=dir(fullfile(f{i},'*.xls'));%find the .xls files
    for j=1:length(files{1,i});
        File_Name{1,i}{j,1}=files{1,i}(j,1).name;%find the name of each .xls file
        fullpath = [f{i} '/' File_Name{1,i}{j,1}];
        disp(['Reading file: ' fullpath])
        x = xlsread(fullpath);
    end
end

Это работает на * nix системах.Возможно, вам придется объединить имена файлов с «\» в Windows.Я найду более элегантный способ и обновлю эту публикацию.

Редактировать : Команда filesep задает косую черту вперед или назад, в зависимости от вашей системы.Следующее должно дать вам полный путь:

fullpath = [f{i} filesep File_Name{1,i}{j,1}];
0 голосов
/ 01 декабря 2011

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

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

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