

matlab初学者です。他の方が作成されたコードを読しながら自分のPCで回るよう，ディレクトリ参照の部分を変えることを要求されています。  
あるディレクトリ内のフォルダをひとつずつ読み込みたいです。フォルダ名はデータIDになっており，IDは「W01_d1」のような「W」「01―16」「d1 or
d3」で構成されています。  
このIDフォルダの中には「condition1」というフォルダがあり，ソフトウェアで読み込む用のファイルが入っています。

[code]

    maindir = ['E:\HDD' filesep ID];
    spmdir_tmp = which('software');
    spmdir = spmdir_tmp(1:end-5);
    NBdir = {[maindir, '\conditon1' ]};
    
[/code]

1行目，filesepについて，ヘルプを見ながら「現在のプラットフォームのファイル区切り文字
(≒IDのW01の部分?)」に該当するのかなと理解していますが，実際にIDのフォルダを読み込みませんし，具体的にどこまでこのコードで参照しているのかわかっていません。  
IDのフォルダ名を読み込んでいないことは，ソースを回すと，「E:\HDD\condition1」がアウトプットされることで判断しています。

お気づきの点教えて頂けましたら幸いです。宜しくお願い致します。


CC BY-SA 4.0
2020-11-02T07:09:18.013
71659
2020-11-04T18:24:04.277
41791
question
matlab
matlabにて，あるディレクトリ内のIDをひとつずつ読み込みたいのですが，filesep IDという部分が回らず，また何をしているのかわかりません


MATLABのスクリプトは、ワークスペースにある変数(ほかの言語でいうグローバル変数のようなもの)を自由に参照することができます。例えば、以下のような`setNBdir.m`というスクリプトがあったとします。

[code]

    % setNBdir.m
    NBdir = ['test' filesep ID];
    
[/code]

コマンドウィンドウで、まず`ID`に値を代入してから、このスクリプトを呼び出せば`NBdir`という変数をワークスペースに作ることができます。

[code]

    >> ID = 'hoge';
    >> setNBdir
    >> NBdir
    NBdir =
        'test\hoge'
    
[/code]

また、別のスクリプトから呼び出すこともできます。

[code]

    % callNBdir.m
    IDs = {'A', 'BB', 'CCC'};
    for i = 1:numel(IDs)
        ID = IDs{i};
        setNBdir
        disp(NBdir)
    end
    
[/code]

このスクリプト(callNBdir.m)を実行すると

[code]

    >> callNBdir
    test\A
    test\BB
    test\CCC
    
[/code]

という結果が得られます。

もしスクリプトの中で`ID`という変数を定義もせずに使っているのなら、あらかじめ`ID`を用意してあることが前提のスクリプトなのでしょう(もし、他の人にも使ってもらうためのスクリプトなら、ワークスペースを使わずに済む関数を作った方がいいですが)。

結論としては「`ID`の中身は自分で用意しましょう」です。


CC BY-SA 4.0
2020-11-04T18:24:04.277
71736
2020-11-04T18:24:04.277
3605
71659
answer