2013-04-25 67 views
0

我正在構建一個讓用戶打開一些文件的代碼。無法在Matlab中使用uigetfile打開文件

reference = warndlg('Choose the files for analysis.'); 
uiwait(reference); 
filenames2 = uigetfile('./*.txt','MultiSelect', 'on'); 
if ~iscell(filenames2) 
    filenames2 = {filenames2}; % force it to be a cell array of strings 
end 
numberOfFiles = numel(filenames2); 

data = importdata(filenames2{i},delimiterIn,headerlinesIn); 

當我運行代碼時,出現提示,我按下OK,然後什麼也沒有發生。代碼只是停止,告訴我:

Error using importdata (line 137) 
Unable to open file. 

Error in FreqVSChampB_no_spec (line 119) 
data=importdata(filenames2{1},delimiterIn,headerlinesIn); 

我只是沒有機會選擇一個文件。如下圖所示,酒窖保持空置狀態。

Empty cell array

+0

我在你提供的代碼片段中看不到任何'importdata'? – Shai 2013-04-25 14:09:25

+0

請查看對上一個答案的編輯 - 檢查用戶是否在uigetfile對話框中按下了「cancel」。 – Shai 2013-04-25 14:10:45

+0

我不明白爲什麼這些信息與我的實際問題有關。我在某個時候看到了添加它的意思,但是我正在測試它,並且我沒有按取消按鈕。 測試是否按下取消的唯一方法是檢查文件名是否爲== 0。但是,即使按OK,它也不會提供任何信息。 – Vissenbot 2013-04-25 14:18:35

回答

1

MATLAB無法找到您所選擇的文件。變量filenames2只包含文件的名稱,而不包含其完整路徑。如果您沒有提供importdata的完整路徑,它將搜索您在MATLAB路徑中提供的任何文件名,並且如果找不到它,則會看到您的錯誤。

嘗試這樣的事情 - 我只是爲了便於說明,單項選擇這麼做,但你可以做多重選擇類似的東西。

[fileName, pathName] = uigetfile('*.txt'); 
fullNameWithPath = fullfile(pathName, fileName); 
importdata(fullNameWithPath) 

fullfile是有用的,因爲它插入(在Windows \/在Unix)pathNamefileName之間正確的字符。

1

你可以嘗試添加

pause(0.1); 

剛過uiwait(reference);

對我來說,它的工作原理。事實上,我注意到當我們使用uiwait和uigetfile時,活動窗口會發生變化。