1

いくつかの目的のために、関数の 1 つの入力として外部テキスト ファイルを提供したいと考えていMATLABます。

通常、このテキスト ファイルは次のレイアウトを示します。

-----------------------------------------------------

HubHt = 90;
GridWidth = 220;
GridHeight = 220;
Ny = 35;
Nz = 37;
Nfft = 8192;
time = 620;
Uhub = 15;
Coherence = Bladed;

-----------------------------------------------------

それを読むために、私は現在このコードを呼び出しています:

fid = fopen('test.inp','r+');
A = textscan(fid,'%s','Delimiter',';','commentStyle', '-','CollectOutput',1);
fclose(fid);
A = A{1};
inputs = regexp(A,' = ','split');

最後の変数inputs<9x1>セルになります。各要素は<1x2>セルになります。

セルの最初の要素は<1x2>INPUT 構造体全体のフィールドであると想定され、2 番目の要素は関連付けられたパラメータです。

現時点では、目標を達成するために非常に静的でひどい方法を使用しています。

inp = struct(char(inputs{1}(1)),str2double(inputs{1}(2)),char(inputs{2}(1)),str2double(inputs{2}(2)),char(inputs{3}(1)),str2double(inputs{3}(2)),char(inputs{4}(1)),str2double(inputs{4}(2)),char(inputs{5}(1)),str2double(inputs{5}(2)),char(inputs{6}(1)),str2double(inputs{6}(2)),char(inputs{7}(1)),str2double(inputs{7}(2)),char(inputs{8}(1)),str2double(inputs{8}(2)),char(inputs{9}(1)),char(inputs{9}(2)));

同じことを行うためのより良い方法が存在すると思います.1つを共有していただければ幸いです.

4

2 に答える 2

3

使用できますcell2struct

% create cell vector where fieldnames and values alternate
tmp = [inputs{:}];

inp =  cell2struct(tmp(2:2:end), tmp (1:2:end), 2);
于 2013-04-04T09:58:51.167 に答える
1

あなたが書いたものは(ほぼ)有効なMatlabソースコードなので、ファイル拡張子.mを付けて実行してみませんか? または、関数内から呼び出します。

これは私たちがよく使ってきたアプローチです。それは簡単で簡単です。明らかに、それが (完全に) 有効な Matlab ソースであることを確認する必要がありますが、それは難しくありません。

于 2013-04-04T09:54:26.030 に答える