1

请帮我:

我希望用户输入一个包含数字或/和字母(没有空格)的文件名。

所以我有两个问题:

1)我尝试了下一个代码,但对话框打开又打开又打开......因为我不知道如何编辑'answer'输入而不再次调用'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
4

2 回答 2

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);

截屏

它返回类似:

>> fName
fName =
test.xlsx

>> fullName
fullName =
C:\Users\Amro\Documents\example\test.xlsx
于 2012-06-06T13:01:42.927 回答
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')

于 2012-06-06T13:00:20.483 回答