Matlab:用fprintf输出格式

时间:2014-11-30 15:52:08

标签: matlab

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

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
...

2 个答案:

答案 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之前,请确保您的单元格数组是一个列。