yyucl 2025-01-09 15:53 采纳率: 0%
浏览 47
已结题

matlab gui如何修改并保存cell中的文件信息

第一次接触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

```

  • 写回答

31条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-01-09 15:54
    关注
    获得0.15元问题酬金
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    问题分析:
    1. 代码中存在可能导致软件卡死的原因,首先是在操作完输入框,进行输入后未做出相应的处理而直接进行下一步操作,导致软件卡死。
    2. 另外,在更新数据集时,虽然使用了switch语句选择相应的数据集进行更新,但是在每个case中应该添加break语句以终止switch语句的执行。 修改建议:
    3. 在用户输入信息后,应该先判断输入是否为空或用户取消,若是则应该返回而不继续往下执行。
    4. 在每个case中的更新数据集部分添加break语句以终止switch语句。 修改后的代码示例:
    if isempty(answer)
        % 用户取消了输入
        return;
    end
    ...
    switch dataID
        case 1
            Data1 = old;
            break;
        case 2
            Data2 = old;
            break;
        case 3
            Data3 = old;
            break;
        case 4
            Data4 = old;
            break;
        case 5
            Data5 = old;
            break;
        case 6
            Data6 = old;
            break;
    end
    

    通过上述修改,在用户输入信息后做出相应判断,避免软件卡死;同时在更新数据集时添加了break语句,确保每个case执行完成后终止switch语句,保证软件正常运行。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月17日
  • 赞助了问题酬金15元 1月9日
  • 修改了问题 1月9日
  • 创建了问题 1月9日