как определить матрицу и запустить цикл для нескольких файлов excel в MATLAB?

У меня есть более 200 файлов Excel с названиями стран и годами. Я хочу, чтобы Matlab определял конкретный диапазон конкретного листа этих файлов в виде матрицы с заголовками (код написан для i-o table-matrix-) и запускал код для каждого файла и сохранял вывод для каждого файла в отдельном файл. Основная проблема в том, что я не могу обрабатывать файлы в цикле и одновременно определять матрицу для каждого файла. Код для одного файла следующий

    function res=cb(a)
    a=[xlsread('aut2000.xls', 'domestic','B7:AV54')]
    a = a(any(a'),any(a))
    ...

Спасибо.


person user1153825    schedule 17.01.2012    source источник


Ответы (1)


Без дополнительной информации о том, как вы определяете диапазон в файлах Excel (т. е. есть ли шаблон для диапазонов), трудно дать конкретный совет, но лучший способ сделать это — определить матрицу в массиве за пределами цикла, а затем просто обратитесь к записи в цикле:

files = {'file1.xls','file2.xls',...};
ranges = {'a7:d54','a6:f90',...};

function res=cb(files, ranges)

for n=1:length(files)
    a = xlsread(files{n}, 'domestic', ranges{n});
end

Вы также можете связать структуры (files = {{'file1.xls','a4:c89'}, {'file2.xls','b7:d300'}, ...}) и запустить функцию в цикле по этой структуре.

person eykanal    schedule 17.01.2012
comment
большое спасибо. Но Matlab создает файл ответов только для последнего файла. Как я могу увидеть результаты всех файлов с их названиями, чтобы различать их? спасибо еще раз. - person user1153825; 17.01.2012
comment
@user1153825 user1153825 - Нет проблем, если вы считаете, что этот ответ был полезен, проголосуйте за него. Я не уверен, что вы спрашиваете в приведенном выше комментарии... Вы можете использовать функцию disp для отображения данных по мере их чтения в цикле for. - person eykanal; 17.01.2012
comment
Я имею в виду, что MATLAB дает только один выходной файл только для одного файла excel, как если бы я не писал цикл для списка файлов. Таким образом, код работает, но я не могу получить то, что хочу, потому что цикл не работает. Я был бы признателен, если бы вы могли более конкретно рассказать о функции disp. Спасибо еще раз. - person user1153825; 18.01.2012
comment
Я предлагаю вам просмотреть очень подробные файлы справки Matlab, доступные на веб-сайте или набрав help disp или doc disp в командной строке Matlab. Опять же, если этот пост был вам полезен, пожалуйста, проголосуйте за него. - person eykanal; 18.01.2012