Matlab GUI,显示学生成绩(读取txt,xls文件),打开文件对话框

guide  (代码: 1\xuenshengchengji22.m)

% 浏览按钮,打开txt或xls文件-----------------------------------
function pushbutton1_Callback(hObject, eventdata, handles)
[filename filepath fileindex]=uigetfile({'*.xls','Excel文件(*.xls)';'*.txt','文本文件(*.txt)';'*.*','所有文件(*.*)'},'选择文件');  %打开文件对话框
if fileindex~=0   %如果没有点击取消
    l=length(filename);   %filename包含后缀名
    if l<=4
        errordlg('错误文件','文件打开错误');  %错误对话框
        return;
    end
    test=filename(1,l-3:l);   %文件名,截取后缀名
    switch test
        case '.xls'   %如果是表格文件
            str=[filepath filename];   %拼接绝对路径
            set(handles.edit2,'String',str);  %
            h=waitbar(0,'正在读取文件....');   %进度条(打开文件比较慢)
            [chengji xingming]=xlsread(str);  %根据绝对路径,打开xls文件。chengji是一个三维列向量,xingming是一个一维列向量。第一个参数chengji只保存纯数字,第二个参数xingming只保存字符串。
            waitbar(1,h,'完成');
            delete(h);    
            set(handles.listbox1,'String',xingming(:,1));   %设置listbox1的显示内容
            handles.chengji=chengji;     %将chengji放入到全局变量中
            guidata(hObject, handles);   %更新gui数据
        case '.txt'
            strfile=[filepath filename];   %拼接绝对路径
            set(handles.edit2,'String',strfile);  
            fin=fopen('chengji.txt','r');   %打开txt文件
            str=fgetl(fin);     %读取txt文件的第一行
            %   A=fscanf(fin,'%d','HeaderLines',1);  忽略前一行的标题内容  
            %   [A B]=textscanf(fin,'%d %d');   返回一个cell类型的数据[A B],一列一列的读  
            %   ftell();    得到读取的位置
            
            [str1 str2 str3 str4]=strread(str,'%s %s %s %s','delimiter',' '); %以空格分割,截取每一行
            xingming(1)=str1;
            counter=2;  %txt文件的第一行是(name yuwen shuxue yuwen),所以从第二行才是需要的内容。
            while feof(fin)==0   %如果能读到txt文件的内容,(没有到txt文件的结尾)
                str=fgetl(fin);  %读取txt文件的一行内容
                [name yuwen shuxue yingyu]=strread(str,'%s %d %d %d','delimiter',' ');
                xingming(counter)=name;
                chengji(counter-1,:)=[yuwen shuxue yingyu];
                counter=counter+1;
            end
            set(handles.listbox1,'String',xingming(1,:));
            handles.chengji=chengji;
            guidata(hObject, handles);
            fclose(fin);  %关闭文件流
            
        otherwise
            errordlg('文件类型错误','文件错误');  
            return;
    end      
end


% listbox选项改变的回调函数-----------------------------------
function listbox1_Callback(hObject, eventdata, handles)

value=get(hObject,'Value')-1;  %value表示选择了listbox的第几项(从1开始)。减1是因为第一行是标题(name yuwen shuxue yuwen)
if value>=1
set(handles.edit1,'String',num2str(handles.chengji(value,:)));
end


% 退出按钮-------------------------------------------------
function pushbutton2_Callback(hObject, eventdata, handles)

clc;
clear all;
close(gcf);



  • 8
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值