2012-06-06 73 views
1

請幫我:Matlab的對話框

我希望用戶輸入包含數字和/或字母文件名(不含空格)。

所以我有兩個問題:

1)我試了下代碼,但該對話框打開,打開,打開....因爲我不知道如何編輯的「答案」輸入而無需再次調用'inputdlg'。

2)檢查文件名的有效性:我使用了'isempty'和'strfind'函數,但我知道有一個更簡單的選項來執行此操作。在我的代碼,我要檢查在其他情況下,每個字母:

while isempty(strfind(answer,'=')) == 0 || isempty(strfind(answer,'*')) == 0 || ... 

可能與「正則表達式」功能,但我不知道如何做到這一點:/

所以我的代碼是:

prompt={'Enter the File name:'}; 
name='Input for file name'; 
numlines=1; 
answer=inputdlg(prompt,name,numlines); 
while isempty(strfind(answer,'=')) == 0 
    answer=inputdlg(prompt,name,numlines); 
end 
+2

只是一個通知 - 輸入文件名有'uigetfile'和' uiputfile'。你知道在你的測試中你正在尋找字符串中的'='和'*'符號(這使它成爲一個無效的文件名)。 – bdecaf

+0

@bdecaf,謝謝,但我不希望用戶從他的目錄中選擇一個文件,只是爲了輸入文件的名稱,我將創建文件(xlsx),併爲其輸入名稱(並插入數據到文件)。例如: :用戶插入:myfile 所以我將創建一個文件:myfile.xlsx。 我的意思是我只想要一個名字,我知道的所有其他事情都要做。 –

+1

@AlonShmiel:這正是'uiputfile'函數的用途。 – Amro

回答

2

由於@bdecaf的意見建議檢查文件的有效性,你可以使用UIPUTFILE函數來顯示一個「另存爲」類型對話框:

[fName,pName] = uiputfile({'*.xlsx' 'Excel (*.xlsx)'}, 'Save as', 'myfile.xlsx'); 
if pName==0, error('No file selected'); end 
fullName = fullfile(pName,fName); 

screenshot

它返回類似於:

>> fName 
fName = 
test.xlsx 

>> fullName 
fullName = 
C:\Users\Amro\Documents\example\test.xlsx 
1

您的變量answer是一個單元陣列。因此,你應該檢查電池陣列的內容:

name='Input for file name'; 
numlines=1; 
answer={''}; 
% answer=inputdlg(prompt,name,numlines); 
while all(cellfun(@isempty,strfind(answer,'='))) 
    answer = inputdlg(prompt,name,numlines); 
end 

在一個更大的全球範圍,我同意@bdecaf和@Amro,你應該使用uigetfile。您也可以通過使用exist(fileName,'file')