我想在文本文件中有一个数据列表,为此,我使用了:
fprintf(fid, '%d %s %d\n',ii, names{ii},vals(ii));
我的数据中的问题是,名称比其他名称更长。所以我得到以下形式的结果:
1 XXY 5
2 NHDMUCY 44
3 LL 96
...
我如何更改fprintf代码行以这种形式生成结果:
1 XXY 5
2 NHDMUCY 44
3 LL 96
...
最佳答案
在循环开始前这样的事情-
%// extents of each vals string and the corresponding whitespace padding
lens0 = cellfun('length',cellfun(@(x) num2str(x),num2cell(1:numel(names)),'Uni',0))
pad_ws_col1 = max(lens0) - lens0
%// extents of each names string and the corresponding whitespace padding
lens1 = cellfun('length',names)
pad_ws_col2 = max(lens1) - lens1
然后,在循环中-
fprintf(fid, '%d %s %s %s %d\n',col1(ii), repmat(' ',1,pad_ws_col1(ii)), ...
names{ii},repmat(' ',1,pad_ws_col2(ii)),vals(ii));
输出将是-
1 XXY 5
2 NHDMUCY 44
3 LL 96
对于范围
99 - 101
,它将是-99 XXY 5
100 NHDMUCY 44
100 LL 96
请注意,第三列数字以固定距离开始,而不是按照问题中的要求从每行的开始以固定距离结束。但是,假设问题的整个思想是以一种更具可读性的方式呈现数据,那么这可能对您有用。
关于matlab - Matlab:使用fprintf输出格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27215056/