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 结构的字段,而第二个元素是相关参数。

目前,我正在使用一种非常静态和糟糕的方式来实现我的目标:

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)));

我相信存在更好的方法来做同样的事情:我希望你能和我分享一个。

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 回答