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.txt等...

そして、データシートとして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 を使用してそれらを動的に定義することはできますが、それでもスコープの問題を解決することはできません。

2 つのオプションがあります。名前が気になる場合は、インポートされたテーブルを構造体に入れることができます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 に答える