我想在文本文件中有一个数据列表,为此我使用:
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
...
答案 0 :(得分:3)
在循环开始之前这样的事情 -
%// 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
请注意,第三列数字以固定距离开始,而不是结束,与问题中提到的每行开头相距固定距离。但是,假设问题的整个想法是以更易读的方式呈现数据,这可能适合您。
答案 1 :(得分:2)
您可以使用函数char
将字符串的单元格数组转换为字符数组,其中所有行都将填充为最长行的长度。
所以对你:
charNames = char( names ) ;
然后您可以使用fprintf
:
fprintf(fid, '%d %s %d\n',ii, charNames(ii,:) , vals(ii)) ;
在将其转换为char之前,请确保您的单元格数组是一个列。