第一次接触matlab gui,设计了一款某专业领域相关文件搜索软件。其中一个按钮的功能是“修改文件信息”,代码改了20几次还是不能正常运行,基本到第二个输入框弹出来,修改了下默认输入按确定后,软件就卡死了。求指点,看看问题在哪里?怎么修改能正常运行?
该软件将专业领域的文件信息分为六类,分别存储在6个cell数据集中,如第1类文件存储在Data1中,第2类文件存储在Data2中。而Data1到Data6存储在ABfiles.mat中。每个cell第一行为列名,包括文件种类、文件号码、文件名字、文件简介、在线地址、下载地址。“修改文件信息”按钮希望实现对已存在的文件的名字、简介、在线地址、下载地址等信息进行修改与保存,其中种类、号码是不变的。以下是该按钮下的代码内容:
```java
function pushbutton6_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
prompt = {'请输入需要修改的文件编号:'};
dlgtitle = '查询文件信息';
dims = [1 50];
definput = {'1-X/2-X/3-X/4-X/5-X/6-X'};
answer = inputdlg(prompt, dlgtitle, dims, definput);
if isempty(answer)
% 用户取消了输入
return;
end
ModifyfileID = answer{1};%文件编号
ModifyfileType = ''; %文件类型
row_idx = 0; % 初始化row_idx
dataID = 0; % 初始化dataID
old = [];
load('ABfiles.mat', 'Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6');
for i = 1:6
oldFiles = eval(['Data' num2str(i)]);
for j = 2:size(oldFiles,1)
if strcmp(oldFiles{j,2}, ModifyfileID)
ModifyfileType = oldFiles{j,1};
row_idx = j;
dataID = i;
old = oldFiles; % 将oldFiles赋值给old变量
break; % 找到匹配的文件编码后跳出循环
end
end
if row_idx~=0
break; % 找到匹配的文件编码后跳出外层循环
end
end
if row_idx~=0
prompt2 = {'文件名称:', '文件概要:', '浏览地址:', '下载地址:'};
dlgtitle2 = '修改文件信息';
dims2 = [4 50];
definput2 = {old{row_idx,3},old{row_idx,4},old{row_idx,5},old{row_idx,6}};
answer2 = inputdlg(prompt2, dlgtitle2, dims2, definput2);
if isempty(answer2)
% 用户取消了输入
msgbox('更新已取消!', '提示', 'info');
return;
end
newfileName = answer2{1};
newfileIntro = answer2{2};
newBrowseSite = answer2{3};
newDownloadSite = answer2{4};
% 更新数据集
old(row_idx,3:6) = {newfileName,newfileIntro,newBrowseSite,newDownloadSite};
% 根据dataID选择保存到的数据集
switch dataID
case 1
Data1 = old;
case 2
Data2 = old;
case 3
Data3 = old;
case 4
Data4 = old;
case 5
Data5 = old;
case 6
Data6 = old;
end
% 保存更新后的数据到ABfiles.mat文件
save('ABfiles.mat', 'Data1', 'Data2', 'Data3', 'Data4', 'Data5', 'Data6');
msgbox('修改成功!', '提示', 'info');
else
msgbox('该文件编号不存在!请重新输入!', '提示', 'error');
end
```