2015-05-06 111 views
4

讓說我有一個結構的數據在工作區的如下如何從matlab中的結構字段名稱生成變量?

data.a={'1','2'}; 
data.b=[1,2,3]; 
data.c='hello'; 

我必須工作區以下變量:

a={'1','2'}; 
b=[1,2,3]; 
c='hello'; 

請告訴我如何與此前進?

爲什麼我需要做到這一點(如果有更好的選擇,以達到我的要求):

我.MAT文件140左右。現在,我需要替換所有這些.mat文件中的字符串。該字符串可以是字符串數組,單元格數組或獨立變量的一部分。我跑所有這些墊文件一個循環,如下加載它們:

tempLoad=load('filename.mat'); 

然後我提取結構tempLoad,這讓我的內心'filename.mat'所有變量的領域。然後我可以處理所有的變量並替換錯誤字符串。現在,我需要將'filename.mat'保存爲確切格式

我不能使用save('filename.mat','tempLoad')或簡單地save('filename.mat'),因爲變量的原始存儲不由他們維護。

所以我需要將tempLoad的所有字段轉換爲變量,然後清除tempLoad並在此之後調用save函數。

+1

不是答案,但也許你應該閱讀[** this **](http://www.mathworks.com/help/matlab/import_export/load-parts-of-variables-from-mat-files。 html)來優化您的一般方法。 – thewaywewalk

+0

謝謝。我會看看這個。 – lonstud

+0

我只是把它放在那裏,因爲你有你想要的,但要做你原來要求你可以使用['assignin'](http:// mathworks。com/help/matlab/ref/assignin.html) – Hoki

回答

3

可以的結構tempLoad保存到'filename.mat'不使用'-struct'格式改變墊文件的結構:

save('filename.mat', '-struct', 'tempLoad'); 

更多信息請參見doc save

您也可以考慮使用matfile對象來訪問保存的matfiles並直接更新特定的字符串,而不必每次加載/保存整個文件。

+1

謝謝。正是我在找什麼。 – lonstud

1

救你試圖使用-struct ARG:

matData = load ('filename.mat'); 

save ('filename2.mat', '-struct', 'matData') 

這應該允許您保存原始結構迴文件。從你說的我認爲這是真正的問題...

+0

謝謝你的幫助。 – lonstud

0

我認爲其他答案可能會幫助你的問題。如果你還是真的想從田間保存新的變量,那麼你可以使用

f = fieldnames(data); 

for ii = 1:numel(f) 
    eval([f{ii} ' = data.' f{ii}]); 
end 

請注意,如果您正在使用此,there is probably a better way想想你正在試圖解決的問題。

+0

'eval'是邪惡的:請參閱[爲什麼不使用'eval'](http://www.mathworks.com/help/matlab/matlab_prog/string-evaluation.html)。 – Shai

+1

這不是建議的,我確實在答案(最後是免責聲明)中說過 – cwissy

+0

我冒昧地編輯你的答案,明確地鏈接到mathworks網頁,爲什麼不使用'eval'。希望你能和你在一起。 – Shai