Я приложил изображение, чтобы лучше объяснить мою проблему.Если вы заметили, между каждым столбцом есть небольшой интервал, и это из-за того, как я написал свой код, который просто выравнивает по левому краю, расстояние 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 пробела на столбец (давая мне два пробела между столбцами).Есть ли способ сделать это с помощью функции?Каков наилучший способ реализации такого рода реализации?
Заранее благодарим вас и, пожалуйста, дайте мне знать, если есть что-то еще, что я могу предложить, или какой-либо способ дальнейшего улучшения размещенного кода (даже если этоне связаны).
![enter image description here](https://i.stack.imgur.com/iJk0k.png)