2014-02-14 140 views
-2

我有一个字符串数组,其行列式如下。将一个字符串数组转换为一个结构体

X ='Xmole(1)=0.0Xmole(2)=1.0rho(1)=2343rho(2)=2343' 

现在我需要一个struct data.Massdensity它看起来应该像这样

 <data.Massdensity = Xmole(1)=0.0 
          Xmole(2)=1.0 
          rho(1)=2343 
          rho(2)=2343> 

我没有使用cell2struct这将让我这样

data.Massdensity ='Xmole(1)=0.0Xmole(2)=1.0rho(1)=2343rho(2)=2343' 

一个结构是否有任何可能的方式,我可以得到像上面那样的结构。

我正在读一文本文件,其内容是这样的

MassDensity{ 

Xmole(1) = 0.0 
Xmole(2) = 1.0 
rho(1) = 2343 # [kg/m^3] 
rho(2) = 2343 # [kg/m^3] 
    } 

我使用FILEREAD读入一个字符串这一点。

所以你提出你的数据INTIAL方式做这个

+0

你确定你的电池阵列的样子吗?这是一个单独的字符串,而不是单元格数组,因此您需要了解如何拆分字符串。所以再看看一下... – thewaywewalk

+0

你是如何制作单元阵列的?你可以编辑这个问题来显示你用来制作X的代码,因为现在看起来很奇怪。 –

+0

我的单元格数组包含单个字符串,看起来像是1x1单元格数组。 – Rickjames

回答

0

问题没有更好的办法是,有没有明显的分隔符。而在原始文件中,您可以选择(假定)使用行结束符作为分隔符。

1)作为单独的字符串读入(可能需要在MATLAB中进行拆分或重新组装),将各个行读入单元阵列。通过textscan,您可以设置一系列分隔符和其他设置,以充分利用这些选项。

例如:

a = textscan(fid,'%s','Delimiter',... 
{'\n','{','}','#'},'CommentStyle','#','MultipleDelimsAsOne',1); 
a = a{1} 

理想情况下,你想结束了:

a{1} = 'Massdensity' 
a{2} = 'Xmole(1)=0.0' 
... 
a{4} = 'rho(2) = 2343' 

你可能需要做空白的一些修整。

2)创建你的结构,使用动态的字段命名:

data.(a{1})=a(2:end); 

data.MassDensity{1} 

ans = 

Xmole(1) = 0.0 
+0

谢谢你的回答,正是我想要的。你能帮助我如何有效地修整所有的空格。 – Rickjames

+0

只需'strtrim'就可以做到。它适用于单元阵列。 – nkjt

相关问题