将矩阵转换为字符串并在列表框中显示



我在Matlab的GUI中使用按钮打开一个包含列表框的对话框。我希望列表框显示一个数组。以下是我在GUI中使用的代码:

% --- Executes on button press in selectdata.
function selectdata_Callback(hObject, eventdata, handles)
% hObject    handle to selectdata (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
w = getappdata(0,'wValue');
z = getappdata(0,'zValue');
A = [w,z];
str = mat2str(w);
[s,v] = listdlg('PromptString','Select a file:','SelectionMode','multiple','ListString',str);

数据A类似于:
437 1203
437 1207
438 1168
438 1146
438 1101
439 1203
439 1174
439 1146
440 1118
440 1148
441 1236
441 1166
441 1142
442 1171
442 1180
443 1258
443 1200
443 1097

我把A转换成一个字符串,这样列表框就会显示它,它确实显示了,但我的问题是它水平显示数据。有没有垂直显示的方法?

问题在于mat2str的输出"用MATLAB语法将二维矩阵转换为字符串。">listdlg's的输入格式不匹配参数'ListString',它采用定义为"指定列表框项目的字符串单元格数组"的值。

因此,代码中的str变量应该是一个字符串的单元数组,可以作为生成

str=cellfun(@num2str,num2cell(w),'UniformOutput',0)

继续阅读。。。在这种情况下,它比这个更简单


幸运的是ListString的值对也可以采用char数组,将数组的行识别为单独的条目。这意味着num2str的输出将正常工作。。。

str = num2str(w);

回到更复杂的解决方案,为什么我在这里包括它?

因为num2str的格式只有在这种情况下才能很好地工作,因为它们所有的数字都有相同的位数!

如果w中的数字有不同的位数,那么num2str创建的char数组中会有前导空格,在这种情况下,较长的解决方案可以提供"更好"的输出。

相关内容

  • 没有找到相关文章

最新更新