Чтение файлов xls из разных папок и запись в MATLAB

У меня есть папки с этой иерархией:

Data meteo 
    Avril
         Day1
             file.xls
         Day2
             file.xls
         Day3
             file.xls
    May
         Day1
             file.xls
         Day2
             file.xls
         Day3
             file.xls
    June
         Day1
             file.xls
         Day2
             file.xls
         Day3
             file.xls

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

Я новичок в Matlab и пытался протестировать этот код.

D = 'data meteo';
DESTINATION = "data meteo destination"
S = dir(fullfile(D,'*'));
N = setdiff({S([S.isdir]).name},{'.','..'}); % number of subfolders of D.

for ii = 1:numel(N)
    T = dir(fullfile(D,N{ii},'*')); 
    C = {T([T.isdir]).name}; %
    for jj = 1:numel(C)
        myExcelFile = fullfile(D,N{ii},C{jj});

        %data = xlsread(myExcelFile);

        data1=xlsread(myExcelFile,'A:A');
    data2=xlsread(myExcelFile,'B:B');
    data3=xlsread(myExcelFile,'C:C');
    data4=xlsread(myExcelFile,'E:E');

    data=[data1 data2 data3 data4]

    %print(data)
    xlswrite(DESTINATION,fullfile(D,N{ii},C{jj}));

    end
end

Мне нужно получить результат в виде папок с той же иерархией:

Data meteo Destination 
    Avril
         Day1
             file.xls 
         Day2
             file.xls
         Day3
             file.xls
    May
         Day1
             file.xls
         Day2
             file.xls
         Day3
             file.xls
    June
         Day1
             file.xls
         Day2
             file.xls
         Day3
             file.xls

person Dr. Mza    schedule 25.08.2019    source источник
comment
какую ошибку вы получаете?   -  person Yuval Harpaz    schedule 25.08.2019


Ответы (1)


Я отредактировал/расширил ваш код, и, похоже, он достигает того, что, как я думаю, вам нужно, когда я пробую его на поддельных каталогах, которые я создал для него, но посмотрите, работает ли он для вас (но я бы рекомендовал протестировать его на КОПИЮ ваших данных - на случай, если что-то не работает и изменяет/переписывает исходные файлы).

Основные изменения, которые я сделал:

  • чтобы добавить функцию setdiff, которую вы использовали для N=, а также для C=, чтобы игнорировать '.' и '..' каталоги.

  • чтобы изменить свой код для myExcelFile, чтобы получить сам файл, а не каталог «Day1»

  • чтобы добавить код, который создает соответствующие каталоги в вашем каталоге DESTINATION, чтобы сохранить в нем новые файлы.

D = 'data meteo';
DESTINATION = 'data meteo destination';
S = dir(fullfile(D,'*'));
N = setdiff({S([S.isdir]).name},{'.','..'}); % number of subfolders of D.

if ~isdir(DESTINATION)
    mkdir(DESTINATION)
end

for ii = 1:numel(N)
    T = dir(fullfile(D,N{ii},'*'));
    C = setdiff({T([T.isdir]).name},{'.','..'}); %

    if ~isdir(fullfile(DESTINATION,N{ii}))
        mkdir(fullfile(DESTINATION,N{ii}))
    end

    for jj = 1:numel(C)

        if ~isdir(fullfile(DESTINATION,N{ii},C{jj}))
            mkdir(fullfile(DESTINATION,N{ii},C{jj}))
        end

        fileList = dir(fullfile(D,N{ii},C{jj},'*.xls*'));
        myExcelFile = fullfile(D,N{ii},C{jj},fileList.name);

        data1=xlsread(myExcelFile,'A:A');
        data2=xlsread(myExcelFile,'B:B');
        data3=xlsread(myExcelFile,'C:C');
        data4=xlsread(myExcelFile,'E:E');

        data=[data1 data2 data3 data4];

        xlswrite(fullfile(DESTINATION,N{ii},C{jj},fileList.name),data);
    end
end
person Craig Arnold    schedule 25.08.2019