Что-то вроде этого перед началом цикла -
%// 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
Пожалуйста, обратите внимание, что цифры третьего столбца начать на фиксированном расстоянии вместо заканчивая на фиксированное расстояние от начала каждой строки, заданное в вопросе. Но, полагая, что вся идея вопроса состояла в том, чтобы представить данные более читаемым образом, это может сработать для вас.
Большое спасибо Divakar :). есть небольшая проблема, когда значение первого столбца изменяется от 9 до 10 или от 99 до 100. – bzak
Очень приятно Divakar ... +1 – Rashid
@bzak Проверьте изменения? – Divakar