1

複数のファイルのデータを 1 つのマトリックスに連結する必要があります。これまでのところ、データのロードをテストしてきた方法は、次のようなものです。

fid = fopen('data01.txt', 'r');
raw = textscan(fid, '%d/%d/%d %d:%d:%f %f %f %f %d', 'delimiter', ',');
m = cellfun(@double, raw, 'UniformOutput', false);
value_of_interest = m{:,10}

...しかし、ディスク上にあるデータ セットは多数のファイルであり、すべてが 1 つのディレクトリ内に存在します。スクリプトをそこに置くのではなく、このディレクトリの特定のパスを参照したいと思います。上記のフォルダー内のすべてのファイルのすべてのデータをロードするようにスクリプトを変更するにはどうすればよいですか?

これまでのところ、私はこれを持っています:

dirname = uigetdir;
files = dir(dirname);
fileIndex = find(~[files.isdir]);

for i = 1:length(fileIndex)
    fileName = files(fileIndex(i)).name;
    fid = fopen(fileName, 'r');
    raw = textscan(fid, '%d/%d/%d %d:%d:%f %f %f %f %d', 'delimiter', ',');
    time = [m{:,4}, m{:,5}, m{:,6}];  %needs to contain a float
    converted_time = ((m{:,4} *  3600.0) + (m{:,5} * 60.0) + m{:,6}); %hh:mm:ss -> seconds
    values = power(m{:,10}, 2); 
    values(values <= thresh) = 0;
    % need to concat into the var 'values' here... also need to accumulate the time variable
end 

plot(converted_time, values);

...しかし、私は 2 つを一緒にする必要があります。

編集:メモリが不足する可能性があることに言及する必要があります。これについては、選択した回答に対する以下のコメントで後で説明します。

4

1 に答える 1

2

fileNameまず、開くファイルの定義方法をもう一度見てください。のフィールドにはフルパスが含まれないfileName = [dirname, '\', files(fileIndex(i)).name];ため、代わりに を試す必要 があります。これにより、現在のパスにないファイルのリストを参照するという問題が解決されます。namefiles

ここで、これらすべてのファイルのすべてのデータを記憶することを避けるために、ループ内でファイルごとにこのジョブを実行できます。

...
    plot(converted_time, values);
    hold('on');
end

短いコマンドhold('on');は、多くの場合hold on;、前の行を消去せずに後続のデータをプロットできるようにプロット軸を変更するだけです。

于 2013-01-24T02:42:22.400 に答える