加载名称包含多个变量的文件(MATLAB)

时间:2014-04-08 14:20:03

标签: string matlab numbers

我正在尝试将大约40个文件加载到MATLAB中,除了2个变量之外,所有人的姓名和位置都是相同的。它们每个包含5000个数据点,我想将它们组合成1个单向量。 它们是HDF5文件,因此我还必须指定文件中的路径,其名称也包含这些变量。

加载其中一个文件的示例是

ROdata = double(h5read('directories\010340text2\010340text2.hdf5','/othertext2'));

这里,变量将是010340和2.因此一般形式类似于(n和x项)

ROdata = double(h5read('directories\xtexty\xtexty.hdf5','/othertexty'));

x和y都有一个数组已加载到MATLAB中。

从这一点来说,我很无能为力。我想num2str来自某个地方,但我尝试过一些东西(比如视频http://blogs.mathworks.com/videos/2009/07/02/advanced-loading-files-using-their-names-for-variable-names/),但这不起作用,因为变量部分在文本内部,而不是在最后。

我当然可以手动这样做,但这40个来自300左右的系列,所以这将是很多写作。

2 个答案:

答案 0 :(得分:3)

这样的事情怎么样:

ROdata = double(h5read( ... 
  sprintf( 'directories/%06dtext%d/%06dtext%d.hdf5', 010340, 2, 010340, 2 ), ...
  sprintf( '/othertext%d', 2 ) ));

%# or more general:
x = 010340;
y = 2;
ROdata = double(h5read( ...
  sprintf( 'directories/%06dtext%d/%06dtext%d.hdf5', x, y, x, y ), ...
  sprintf( '/othertext%d', y ) ));

%# or even more general:
%# assume X is your array containing elements x, Y for y elements

ROdata = cell{ numel(X), 1 };
for ii=1:numel(X)
  ROdata{ii} = double(h5read( ...
    sprintf( 'directories/%06dtext%d/%06dtext%d.hdf5', X(ii), Y(ii), X(ii), Y(ii) ), ...
    sprintf( '/othertext%d', Y(ii) ) ));
end

看看sprintf功能,它非常整洁。

为了使其正常工作,您需要使用正斜杠,因为反斜杠充当转义字符。另一种可能性是使用'\\',但'/'更具可读性并且也可以使用。

由于X中的数字可能包含前导零:%06d添加零填充,因此插入的数字将始终为6位数。

答案 1 :(得分:1)

使用字符串连接怎么样?

ROdata = double(h5read(['directories\xtexty\' num2str(x) 'xtexty.hdf5'],['/othertexty' num2str(y)]));