将文本文件解析为结构

时间:2013-04-04 09:29:12

标签: matlab parsing text structure

出于某些目的,我想提供一个外部文本文件作为我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)));

我相信存在更好的方法来做同样的事情:我想如果你能与我分享一个。

2 个答案:

答案 0 :(得分:3)

您可以使用cell2struct

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

inp =  cell2struct(tmp(2:2:end), tmp (1:2:end), 2);

答案 1 :(得分:1)

既然你写的是(几乎)有效的Matlab源代码,为什么不给它文件扩展名.m并运行它?或者从你的功能中调用它。

这是我们经常使用的一种方法;它简单明了。显然你必须确保它是(完全)有效的Matlab源,但这并不困难。