我附上一张图片,以更好地说明我的问题。如果您注意到,每列之间都有相当大的间隔,这是因为我编写代码的方式,这迫使在每次放置一列之后向左对齐,长度为32个间隔。这是代码:
function this = writeDataToFile(this, fileName)
fid = fopen(fileName, 'w');
for row=1:size(this.metaPrint,1)
for col=1:size(this.metaPrint,2)
fprintf(fid, '%s', this.metaPrint(row,col));
end
fprintf(fid, '\n');
end %for
%Write labels and units to file. These are cell arrays. Under
%this is the numeric array of data.
fprintf('\n');
fprintf(fid, '%-42s', '============start of data============');
fprintf(fid, '\n');
fprintf(fid, '%-32s', this.colLabels{:});
fprintf(fid, '\n');
fprintf(fid, '%-32s', this.colUnits{:});
fprintf(fid, '\n');
for row=1:size(this.data,1)
for col=1:size(this.data,2)
fprintf(fid, '%-32s', this.data(row,col));
end %for
fprintf(fid, '\n');
end %for
fclose(fid);
end %writeDataToFile
因此,您可以看到我只是对空格进行了硬编码,这是因为在列的下面我到达了colLabel
是30个字符串的地方。如果我将间距减小得太小,则到达该点时输出会变得混乱。
现在,colLables
和colUnits
都以char
的形式存储在单元格数组中,数据以double
的形式存储在数值数组中。我想做的是能够基于任何给定行的列中的最大长度来调整间距-以便每列始终有maxRowLength + 2个空格(在列之间提供两个白色空格)。有没有办法使用函数来做到这一点?进行这种实施的最佳方法是什么?
预先感谢您,如果我可以提供其他方法或进一步改善我发布的代码的方式(即使不相关),请告诉我。