【问题标题】:MATLAB string variablesMATLAB 字符串变量
【发布时间】:2013-11-21 05:50:12
【问题描述】:

我正在尝试在 MATLAB 中编写一个函数,该函数将在矩阵中使用一组相当大的 excel 文件来读取和分析数字(因为有很多 excel 文件和很多数字)。我让主函数调用一个函数,该函数应该从主函数的矩阵中获取 excel 文件的名称,并使用函数“xlsread”来读取相应的单元格。每个文件具有相同的格式和相同的列数和行数,因此指定要读取的单元格不是问题。但是,为了将每个 excel 文件传递​​给读取输入函数,我将 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');

所以我想问题在于我如何设置文件名矩阵。我想以这种方式设置它,因为我不知道最终需要分析多少张工作表,并且通过使用矩阵,我可以轻松快速地添加、删除或编辑任何工作表,而无需更改我的代码的任何其他部分。

【问题讨论】:

    标签: string excel matlab variables


    【解决方案1】:

    您的问题很可能与此行有关:

    文件=文件名(i);

    filenames,正如你所定义的,是一个字符矩阵。这意味着filenames(1) 将返回f,而不是您想要的file1.csv。在我看来,最好的选择是将文件名转换为元胞数组:

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

    【讨论】:

    • 谢谢,成功了。在我的代码中,我确实使用 {} 指定了矩阵,但我在 file=filenames{i} 行中没有 {}。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多