2013-05-02 121 views
1

我試圖訪問多個文件,在for循環中,像這樣:爲什麼strcat()在Matlab中不返回字符串?

年齡= xlsread(strcat的( 'Pipeline_BO_2013 _',名稱(2), '_ CDBU.xlsx'), '數據',「^ h :我)

它返回一個錯誤的文件名必須是字符串。所以,我沒有下面的測試:

名= strcat的( 'Pipeline_BO_2013 _',名稱(2), '_ CDBU.xlsx')

名=

'Pipeline_BO_2013_0107_CDBU.xlsx' 

ISSTR(文件名)

ANS =

0 

這是如此怪異。有人能幫我嗎?非常感謝。

+0

嘗試'ischar',讓我知道你會得到什麼結果。根據MATLAB文檔'isstr'將在未來版本中被刪除。順便說一句,如果我複製並粘貼你的輸入,我會爲'isstr(filename)'得到'ans = 1'。 – Justin 2013-05-02 01:25:30

+0

嘗試'ischar(names(2))'。我打賭會返回'0'。如果是,請嘗試使用以下命令創建文件名:'filename = ['Pipeline_BO_2013_',num2str(names(2)),'_CDBU.xlsx']'。讓我知道它是否有效,我會把它變成一個答案。 – 2013-05-02 02:08:07

+0

Matlab'isstr'在功能上等同於'ischar';這只是一個名稱的變化。 – 2013-05-02 03:19:27

回答

3

看起來像namescellstr而不是char陣列。如果是這樣,在索引它用括號像names(2)將返回1長cellstr陣列,而不是一個字符數組。當strcat被調用它的任何參數爲cellstr,它返回一個cellstr。然後xlsread錯誤,因爲它想要一個char,而不是一個cellstr

而不是僅僅調用isstrischarfilename,做class(filename)它會告訴你它是什麼。

另一條線索是filename顯示帶有引號。這就是細胞如何顯示。如果它是一個char數組,它將不顯示引號。

如果是這種情況,並且names是cellstr,則需要使用{}索引來「彈出」單元格內容。

filename = strcat('Pipeline_BO_2013_',names{2},'_CDBU.xlsx') 

或者你可以使用sprintf,你可能發現更多的可讀性,並將於一旦你開始插多個不同類型的參數更加靈活。

filename = sprintf('Pipeline_BO_2013_%s_CDBU.xlsx', names{2}) 
% An example of more flexibility: 
year = 2013; 
filename = sprintf('Pipeline_BO_%04d_%s_CDBU.xlsx', year, names{2}) 
+0

謝謝安德魯!這正是原因。 – user2341320 2013-11-13 01:50:31

相關問題