我正在尝试在 MATLAB 中编写一个函数,它将在矩阵中使用一组相当大的 excel 文件来读取和分析数字(因为有很多 excel 文件和很多数字)。我让主函数调用一个函数,该函数应该从主函数的矩阵中获取 excel 文件的名称,并使用函数“xlsread”来读取相应的单元格。每个文件具有相同的格式和相同的列数和行数,因此指定要读取的单元格不是问题。但是,为了将每个 excel 文件传递给 read 输入函数,我将 excel 文件的名称分配给一个变量,然后将其传递给 read 函数,然后将变量传递给 xlsread。但是,当我运行它时,我收到错误:“文件名必须是字符串。”下面是我如何设置代码的示例。
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
这可能吗?
仅供引用, xlsread 函数将参数作为字符串接收。第一个参数是文件名,例如:
'file1.xls'
第二个参数是要导入的单元格范围,如:
'B2:D5'
这告诉 MATLAB 将数据导入矩形中包含的单元格中,该矩形的左上角为 B2,右下角为 D5。
谢谢你的帮助。
编辑:如果我将变量直接分配给文件名,我可以让它工作,例如:
name='file1';
xlsread(name,'A1:C5');
所以我想问题在于我如何设置文件名矩阵。我想以这种方式设置它,因为我不知道最终需要分析多少张工作表,并且通过使用矩阵,我可以轻松快速地添加、删除或编辑任何工作表,而无需更改我的代码的任何其他部分。
最佳答案
您的问题很可能与此行有关:
文件=文件名(i);filenames
,正如你所定义的,是一个 char 矩阵。这意味着 filenames(1)
将返回 f
,而不是 file1.csv
如你所愿。如我所见,最好的选择是将文件名转换为元胞数组:
filenames = {'file1.csv','file2.csv',....};
for i=1:10
file=filenames{i};
data=readin(file);
end
关于string - MATLAB 字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113485/