2016-07-13 10 views
0

名前付きフィールドを持つ構造体を出力するh5readを使用してHDF5ファイルからデータをインポートしています。現在、これらのフィールドのサイズを取得しようとしています。特定のフィールド名を持つループを使用して構造体からデータを抽出する

for n = 1:namesSizeH5 
    currentName = strcat('h5(1).',namesH5((0+n):n)); 
    currentSize = size(currentName); 
    disp('currentName is'); 
    disp(currentName); 
    disp('currentSize is'); 
    disp(currentSize); 
end 

これを実行すると、それが正しく反復ごとに現在のフィールド名をつかむだけでなく、ために各フィールドを取得するための正しい構造体のコールを構築します。しかし、currentSizeは常に構造体のサイズだけを返します。 私はこれを正しい呼び出しでハードコーディングしてテストしましたが、これはうまくいきますが、ループ中に壊れてしまいます。

+1

'size'は、文字列のサイズを返します'ので、文字列を返しますstrcat'。私は[正しい構文](http://www.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html)を試してみることをお勧めします。 – excaza

答えて

0

次のコードは、構造体の各フィールドのサイズを取得する方法を説明しています。あなたの状況にコードを適応させるだけです。

% Create struct 
sampleStruct.field1 = 'This is field 1'; 
sampleStruct.field2 = true(5); 
sampleStruct.field3 = randn(1,5); 

% Get fieldnames 
fnames = fieldnames(sampleStruct); 

% Display fields size 
for i=1:length(fnames) 
    disp(['Field name is: ' fnames{i}]); 
    fieldValue = sampleStruct.(fnames{i}); 
    fieldSize = size(fieldValue); 
    disp(['Field size is: ' mat2str(fieldSize)]); 
end 

出力は次のとおり

Field name is: field1 
Field size is: [1 15] 
Field name is: field2 
Field size is: [5 5] 
Field name is: field3 
Field size is: [1 5] 

有用な機能:fieldnames。コマンドウィンドウに「doc fieldnames」と入力すると、ヘルプドキュメントが表示されます。

推奨読書: http://imageprocessinglog.com/tutorials/matlab-structures-datatype/

関連する問題