1

matlabファイル名を受け取る関数があります。このファイルには構造体が含まれており、後でこのファイルを関数内で実行して、構造体がワークスペースにロードされるようにする必要があります。

例えば:

私の機能はhello(a)、「a」はファイル名で、このファイルには構造体があります。

コマンド ウィンドウでファイルを実行すると、この構造体がワークスペースに読み込まれます。関数を呼び出すときに構造体をワークスペースにロードするのと同じ方法です。

を試しeval(a)ましたが、これはファイル内の構造体をワークスペースにロードしていません。

ファイルに構造体があることはわかっていますが、ファイル名から構造体名を取得する方法はありますが、これは動的に変化します。

では、関数内の構造をどのように返す必要がありますか?

4

2 に答える 2

1

ファイル内の構造体 (または構造体) をワークスペースに自動的にコピーするか、データを自分で割り当てるかがわかりません。

次のソリューションでは、関数を使用して、すべての変数をファイルaから「ベース」ワークスペースに自動的にコピーしassignin()ます。このソリューションでは、.mat ファイルのファイルを指定することも前提としています。

function hello(a)
   all_structs = load('-mat', a);
   var_names = fieldnames(all_structs);
   for k = 1:length(var_names)
      assignin('base', var_names{k}, all_structs.(var_names{k}));
   end
end
于 2013-07-18T10:41:43.720 に答える
0

試してくださいeval

function mystruct = readstruct(filename)
% ... read in text from file here ...
eval(text)

たとえば、ファイルに text が含まれていると仮定すると'mystruct.myval = 1'、ファイルの内容を string に読み取った後texteval(text)戻り値が返されます。

mystruct = 

    myval: 1

構造体をワークスペースに読み込むには、関数が構造体を返す必要があります。

ファイルに任意のデータが含まれている場合 (おそらく ascii 形式である必要はありません)、ファイルを読み取った後に単純に構造体に割り当てることができます。

function mystruct = readstruct(filename)
% ... read in text from file here ...
% ... perform conversion of data type ...
mystruct.value = values 
于 2013-07-18T10:13:55.670 に答える