0

所以在文本文件中有一些简单的整理数据,命名如下:

Hm_slit_01.txt...Hm_slit_21.txt; Hs_slit_01.txt...Hs_slit_23.txt; Sm_slit_01.txt...Sm_slit_27.txt; Ss_slit_01.txt...Ss_slit_32.txtETC...

我需要将它作为数据表导入到 matlab 中,最好是同名但没有.txt.

所以我创建了一个函数,它接受一个前缀Hm, Hs ...和一个最终数字来迭代文件命名。但它不会在工作场所外部保存数据表。这是代码。

function [datasheet] = imp_vrad(prefix,numslits)
%[data] = imp_vrad(prefix,numslits)
%   imports data with filename <prefix>_slit_<##>.txt
%   to be a matlab datasheet data = <prefix>_slit_<##>
%   here ## starts from '01' and goes to 'numslits'
%   FILES MUST BE IN WORKING DIRECTORY!

for currslit=1:numslits
    if currslit < 10
        filename = [prefix '_slit_0' num2str(currslit) '.txt']; %names file
        data = [prefix '_slit_0' num2str(currslit)]; %names datasheet
    else
        filename = [prefix '_slit_' num2str(currslit) '.txt']; %names file
        data = [prefix '_slit_' num2str(currslit)]; %names datasheet
    end

    disp(['importing ' filename ' as ' data]) 
    importdata(filename);   %imports the data

end
end

有问题的行是最后一行。我也试过data=importdata(filename);无济于事。

提前致谢!

4

1 回答 1

1

我不确定是否有办法更改 matlab 中变量的范围。您可以使用 eval 动态定义它们,但这仍然无法解决范围问题。

您有两个选择:如果名称对您很重要,您可以将导入的表放​​在一个结构中,类似于这样import做;或者,如果您只关心索引,您可以将它们导入一个数组(可能是多维的)。

对于前者,你可以做类似的事情

function [datasheet] = imp_vrad(prefix,numslits)
%[data] = imp_vrad(prefix,numslits)
%   imports data with filenames <prefix>_slit_<##>.txt
%   into a struct with labels <prefix>_slit_<##>
%   here ## starts from '01' and goes to 'numslits'
%   FILES MUST BE IN WORKING DIRECTORY!
%
    datasheet = struct();
    for currslit=1:numslits
        dataname = sprintf('%s_slit_%02d',prefix,currslit);
        filename = [dataname,'.txt'];

        disp(['importing ' filename ' as ' data]) 
        data = importdata(filename);   %imports the data

        datasheet.(dataname) = data;
    end

end
于 2013-09-08T09:53:13.203 回答