我正在将文件中的文本插入到我的列表框中,它会忽略字符串之间的标签。我怎样才能使它不会忽略标签并按原样打印它?
我的文字档案:
05-WD-3052 19:56:07 03-Apr-2016
06-C-874414 19:57:03 03-Apr-2016
10-G-11 19:58:03 03-Apr-2016
列表框中的内容
我的代码:
fileID = fopen('Output/LicenseLog.txt','rt');
tScan = textscan(fileID, '%s','Delimiter','');
newScan = tScan{:};
set(handles.listbox1,'String',newScan);
fclose(fileID);
答案 0 :(得分:3)
列表框与输入中的选项卡相关,但您使用的是可变宽度字体,因此文本不会像您期望的那样排列。您可以将列表框的FontName
属性更改为'FixedWidth'
以使用默认的固定宽度字体,也可以将其设置为您选择的任何fixed-width/monospaced font以获得预期结果:
data = {'05-WD-3052 19:56:07 03-Apr-2016', ...
'06-C-874414 19:57:03 03-Apr-2016', ...
'10-G-11 19:58:03 03-Apr-2016'};
u = uicontrol('Style', 'list', ...
'FontName', 'FixedWidth', ...
'String', data);
<强>更新强>
在仔细查看数据之后,问题是标签在多个系统,程序等中的显示方式不同。有些行实际上需要两个标签在GUI中查看时正确对齐所有内容。因此,您可能希望使用sprintf
将使用制表符分隔的列表转换为具有显式空格的列表。
%// Split the string into groups based on the tabs
pieces = regexp(tScans{1}, '\t+', 'split');
for k = 1:numel(pieces)
%// Create a 20-character wide padded string for each element
data{k} = sprintf('%-20s', pieces{k}{:})
end
set(handles.listbox, 'String', data)
或者如果你想要一个单行:
data = cellfun(@(x)sprintf('%-20s', x{:}), regexp(tScan{1}, '\t+', 'split'), 'uni', 0);
set(handles.listbox, 'String', data)
当将它与上面提到的固定宽度字体结合使用时,你应该得到你想要的行为。