GUI listbox
(自用笔记)
功能details拆分
同时打开多个文件,可以是不同类型的,在listbox中显示出路径和文件名;
计算每个数据文件(.txt或.dat)掉帧出现的行数,存储到元胞数组,输出到一个listbox;
计算每个文件分别错帧总数,存到一个向量里,输出到一个listbox;
初步功能的简陋GUI
listbox/列表框
其列表属性中 string 直接输入显示换行的方法:
- 双击这个地方,暴、力输入换行:
- 使用.m语句
set(handles.listbox1,'String',[{'图书馆'};{'图书馆2'}]);
读取多行文件:uigetfile
设置MultiSelect为on
[filename, pathname, filterindex] = uigetfile( '*.*','Pick the file','MultiSelect', 'on');
full code
[filename, pathname, filterindex] = uigetfile( '*.*','Pick the file','MultiSelect', 'on');
sz=size(filename);
for i = 1:sz(2)
Filename{i} = [pathname,filename{1,i}];
A{i,1} = textread([pathname,filename{1,i}],'%s');%通过B存储可以读取到的几个不同格式的数据
end
pushbutton的callback,
读取二进制,mindmap @ProcessOn :
%将多组数据的1516列分别提取出来
for i = 1:length(A)
ddec_A = zeros(length(A{i,1}),1);
for j = 1:length(A{i,1})
a = A{i,1}(j);%取第一行数组
% b(i) = hex2dec(a{1,1}(1:2));%取第15-16个字符并转换为十进制
ddec_A(j) = hex2dec(a{1,1}(15:16));
decA{i} = ddec_A;%1x2cell 存了组数据的1516列 并转化为10进制的结果
%{}前不能带下划线,此类型的变量不可以
end
end
PickColum = decA;
getNN = size(decA{1,1});getN = getNN(1);%=21 = length(pickcol)
n = 0;
d = 0;
X = [0 0];
for j = 1:length(decA)
pickcol = PickColum{1,j};
% 放到循环里来,每轮更新n,d从0开始
n = 0;
d = 0;
X = [0];% 这里我本来设置的是[0,0]
for i = 2:getN % length(pickcol)
m = pickcol(i) - pickcol(i-1);
if ((m ~= 1 )&&(m*(-1)~=200))
d = d + 1;
X(d) = i;% 记下当前出错行标
n = n+1;% 总行数加一
nn = n;
else
nn = n;
d = d;
end
end
XX{j,1} = X;
NN{j} = nn;
end
disp(XX)
disp(NN)
for i = 1:length(XX)
XX1{i} = num2str(XX{i,1});
% XX2 = XX1;
end
事后发现n和d留一个就行,不过本着能用就行的原则,也懒得优化了
注意此时,
项目 | Value |
---|---|
X | 记录本轮数据错帧行行标 |
nn | 记录本轮数据错帧总行数;属性:cell |
XX | 属性:double组成的cell |
NN | 属性:double组成的cell |
显示到listbox时要换行:
因此以下处理:
for i = 1:length(XX)
XX1{i} = num2str(XX{i,1});
% XX2 = XX1;
end
set(handles.listbox3,'String',NN);%[{'图书馆'};{'图书馆2'}]
% set(handles.listbox2,'String',[XX{1,1};XX{2,1}]);
set(handles.listbox2,'String',XX1);
选了两组数据做实验