2014-02-14 3 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, чтобы прочитать это в одну строку.

Так ли лучший способ сделать это

+0

вы уверены ваш массив ячеек выглядит так? Это единственная строка, а не массив ячеек, поэтому вам нужно будет узнать, как разбить строку. Так что посмотрите еще раз ... – thewaywewalk

+0

Как вы сделали свой массив ячеек? Можете ли вы отредактировать вопрос, чтобы показать код, который вы использовали для создания X, поскольку в настоящий момент это кажется очень странным. –

+0

my cell array содержит единственную строку, которая выглядит так, что это массив ячеек 1x1. – Rickjames

ответ

0

Проблемы с intial способом вы представили свои данные в том, что нет никаких очевидных разделителей. В то время как в исходном файле у вас есть опция (одна предполагает) использования строк в качестве разделителей.

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

Смежные вопросы