1

私は MATLAB コーディングの初心者なので、else-ware からコードを取得して自分のニーズに適用しました。これまで、1 つのフォルダーからすべてのファイルを列ベクトルに取得することができましたが、親ディレクトリ内のすべてのフォルダーからすべてのファイルをこの単一の列ベクトルに取得したいと考えています。ここに私のコードがあります:

...

folder = ('parent_directory_path_name\01');     
files = eval(['dir(''' folder '\*wind*.na'')']); % take files with wind in name
N = length(files);

%%

for n=1:N

    filename = files(n).name;
    eval(['fid = fopen(''' folder '/' filename ''');']) 
    data=textscan(fid, '%s','delimiter','\n');
    lines=data{1};
    lines=lines(56:end);

        for i=1:size(lines,1)
            [s(i).time s(i).east s(i).north] = strread(lines{i},'%f %f %f %*f %*f %*f %*f %*f');
        end

    time = [s.time]';
    east (:,n) = [s.east]';
    north(:,n) = [s.north]';

fclose(fid);

end

%%

ea = east (:);      % put matrix columns into 1 column
no = north (:);

...

フォルダー指定の周りに置くことができる単純なループがあるに違いないと確信していますが、それを解決することはできません。私も見ました: MATLABの特定のディレクトリの下にあるすべてのファイルを取得する方法は? 、しかし、方法が非常に異なるため、これを使用しているコードに適用する方法がわかりません。

どんなヒントでも大歓迎です。

ありがとう、ルーク

編集

Re:Shai (コメント セクションが十分に大きくない)

さて、試してみましたが、ファイルを開く方法がわかりません。これが私が試したことです:

sub_f = dir( fullfile( 'parent_folder', '*' ) );
for si = 1:numel( sub_f )
    if sub_f(si).name(1) =='.', continue; 
    end; % skip '.' and '..'
    files = dir( fullfile( 'parent_folder', sub_f(si).name, '*wind*.na' ) ); % get all files in sub folder
    for n = 1:numel(files)
         % put your code here...
        filename = files(n).name;
        fid = fopen('' sub_f '/' filename '');
        data=textscan(fid, '%s','delimiter','\n');
        lines=data{1};
        lines=lines(56:end);
        for i=1:size(lines,1)
            [s(i).time s(i).east s(i).north] = strread(lines{i},'%f %f %f %*f %*f %*f %*f %*f');
        end
        time = [s.time]';
        east (:,n) = [s.east]';
        north(:,n) = [s.north]';
        fclose(fid);

    end
end

再度、感謝します!

4

1 に答える 1

1

いくつかのコメント:

  1. fullfileフォルダー名とファイル名を単純な文字列として連結する代わりに、次のコマンドを使用することをお勧めします。

    folder = fullfile( 'parent_folder', '01' );

  2. evel面倒な式は必要ありません。

    files = dir( fullfile( folder, '*wind*.na' ) );

  3. サブフォルダーを反復処理するには、単純に行うことができます

    
    sub_f = dir( fullfile( 'parent_folder', '*' ) );
    for si = 1:numel( sub_f )
        if sub_f(si).name(1) =='.', continue; end; % skip '.' and '..'
        files = dir( fullfile( 'parent_folder', sub_f(si).name, '*wind*.na' ) ); get all files in sub folder
        for n = 1:numel(files)
             % put your code here...
        end
    end
    

于 2012-12-17T11:38:05.197 に答える