2011-10-24 74 views
0

我對下面的代碼有疑問。在MATLAB中分配數組

[name file] = uigetfile('*', 'Select an image'); 
if [name file] ~= 0 
    %file found 
end 

有沒有辦法說[姓名文件]可以分配給數組?例如,Filepath[2] = ui.getfile..(這不起作用)。

當我嘗試下面的代碼時,我只獲取文件名而不是路徑。我是否宣佈這個數組錯了?

Filepath{2} = uigetfile({'*.wav;*.mp3;*.aac;*.ogg'}, 'Select a file'); 
%Filepath{2} = uigetfile('*', 'Select an image'); 
%noFile = Filepath(0); 
%if Filepath[1]~= 0 
%if Filepath ~= 0 

disp('Loading signal'); 
disp(Filepath); 
%disp(Filepath{0}); 
disp('Filepath{1}'); 
disp(Filepath{1}); 
disp('Filepath{2}'); 
disp(Filepath{2}); 

回答

2

我想你可能會對函數的多個「輸出參數」的語法感到困惑。與大多數編程語言不同,MATLAB允許函數具有多個返回值;這些被稱爲輸出參數。當你有一個函數[a b] = foo(x)時,最好把它看作只發送第一個輸出到一個叫做a的變量的語法,第二個輸出到一個叫做b的變量。儘管語法看起來像一個數組,但最好不要這樣想。

下面是uigetfile一個例子:

[filename, pathname] = uigetfile('*.m', 'Select a file'); 

這給所選擇的文件的文件名和路徑,在變量稱爲filenamepathname,分別。

filename = 

foo.m 


pathname = 

/home/tobin/ 

但我不明白的是,如果它被取消或滿陣,如果它是全成這個方法返回零。那麼如何檢查零(文件未找到)?

爲什麼不試試呢?

> [filename, pathname] = uigetfile('*', 'Select a file') 

filename = 

    0 


pathname = 

    0 

看起來如果取消uigetfile這兩個輸出都是0。所以你可以這樣做:

[filename, pathname] = uigetfile('*', 'Select a file'); 
fullname = horzcat(pathname, filename); 
if filename == 0 
    fprintf('uigetfile was cancelled.\n'); 
else 
    fprintf('user selected "%s".\n', fullname); 
end 
+0

是否有辦法全球化這些變量[文件名,路徑名],所以我可以在其他方法訪問它們?我試圖在其他編程語言中將它們聲明爲頂層,但這不起作用;在'm前打字全球也沒用。 – Vincent

+0

沒有必要在Matlab中聲明變量,也沒有任何方式這樣做。 – nibot

+1

如果你做'全局文件名路徑名',那麼'filename'和'pathname'將成爲全局變量。與其他編程語言不同,您必須將'全局文件名路徑名'行放入* every *函數中,以訪問這些全局變量。看,例如:http://stackoverflow.com/questions/4911926/declaring-a-global-variable-in-matlab – nibot

2

MATLAB中的數組訪問在「普通」數組中使用括號,或使用大括號cell arrays。 「正常」數組只能保存數值,因此您必須使用單元陣列 - 因此請嘗試使用Filepath{2} = uigetfile(...)