2012-05-09 58 views
2

我最近更新的2007年a到2012A我的Matlab的修訂和我正在與一些代碼,在R2007a,跑就好了問題。具體有關的文件名由dir('./folder')操縱Matlab的結構

一個例子返回的結構:

X = dir('./folder'); 
p = X(:).name; 

運行在R2007a這個代碼,對包含該文件夾中的所有文件名,然而,在R2012a p只能包含的名字X.names中的第一個文件。我也曾嘗試:

p = X.name; 

p = X(:,1).name; 

所有這一切不產生文件名的所需列表。

有其他人遇到過這個問題嗎?有人能指出我正確的方向嗎?謝謝!

+3

我沒有R2012對我進行測試(只八音和我不知道它模擬的是什麼版本),但我懷疑'P = {X.name}'會將'p'轉換爲一個單元格數組,使得'p {i}'是第i條路徑。 –

+0

@ mathematical.coffee:我看到你想到了同樣的事情。是的,它的工作原理。 – Jonas

回答

6

我很驚訝,R2007a應該能夠做到這一點。不管怎麼說,一直努力是鏈狀成單元陣列:

p = {X.name}; 
+0

偉大的作品!但我不明白爲什麼X.name不被視爲單元格數組。我可以接受的是,語法就是這樣工作的,但是有什麼具體原因需要括號嗎?如果X.name是一個單元格數組,那麼他們添加了哪些信息? – GPSmaster

+0

@GPSmaster:'X'是一個結構數組,'X(i).name'是一個字符串 - 不是單元格數組。 'X.name'返回與大括號連接的多個輸出參數,就像您寫過'{X(1).name,X(2).name,'等等。 – Jonas

+0

例如,class()函數適用於我遇到的每個對象,但在X.name的情況下,如果X.name被括號包圍,它將僅返回「單元格」。否則,它會返回一個錯誤。 – GPSmaster