2013-11-21 7 views
0

Я пытаюсь написать функцию в MATLAB, которая будет группировать довольно большие файлы excel в матрице, чтобы читать и анализировать числа (потому что есть много файлов excel и много чисел). У меня есть функция вызова функции, которая должна принимать имена файлов excel из матрицы в основной функции и использовать функцию «xlsread» для чтения соответствующих ячеек. Каждый файл имеет тот же формат и одинаковое количество столбцов и строк, поэтому назначение ячеек для чтения не является проблемой. Однако, чтобы передать каждый файл excel в функцию чтения, я назначаю имя файла excel переменной, которая затем передается функции чтения, которая затем передает переменную в xlsread. Однако, когда я запускаю его, я получаю сообщение об ошибке: «Имя файла должно быть строкой». Ниже приведен пример того, как настроен мой код.Строковые переменные MATLAB

filenames = {'file1.csv','file2.csv',....}; 
for i=1:10 
    file=filenames(i); 
    data=readin(file); 
end 


function [sheetdata] = readin(filename) 
sheetdata = xlsread(filename,'cellrange','sheet'); 
end 

Возможно ли это?

Просто fyi, функция xlsread принимает аргументы как строки. Первый аргумент является именем файла, такие как:

«file1.xls»

Вторым аргументом является диапазон ячеек, которые будут импортированы, такие как:

«B2: D5»

Это указывает MATLAB на импорт данных в ячейки, включенные в прямоугольник, в верхнем левом углу B2 и в правом нижнем углу D5.

Спасибо за любую помощь.

EDIT: Я могу заставить его работать, если я задаю переменную непосредственно к имени файла, например:

name='file1'; 
xlsread(name,'A1:C5'); 

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

ответ

4

Ваша проблема, скорее всего, с этой линией:

файл = имен файлов (I);

filenames, как вы его определили, является матрицей символов. Это означает, что filenames(1) вернет f, а не file1.csv, как вы планируете. Лучший вариант, как я вижу, заключается в преобразовании имен файлов в массив ячеек:

filenames = {'file1.csv','file2.csv',....}; 
for i=1:10 
    file=filenames{i}; 
    data=readin(file); 
end 
+0

Спасибо, что сделал трюк. В моем коде у меня была матрица, обозначенная {}, но у меня не было {} в строке file = filenames {i}. – Kevin

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