我想在文本文件中有一个数据列表,为此,我使用了:

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/

10-12 12:35
查看更多