2014-11-30 2 views
2

Я хочу иметь список данных в текстовом файле, и для этого я использую:Matlab: формат вывода с fprintf

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

ответ

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 

Пожалуйста, обратите внимание, что цифры третьего столбца начать на фиксированном расстоянии вместо заканчивая на фиксированное расстояние от начала каждой строки, заданное в вопросе. Но, полагая, что вся идея вопроса состояла в том, чтобы представить данные более читаемым образом, это может сработать для вас.

+0

Большое спасибо Divakar :). есть небольшая проблема, когда значение первого столбца изменяется от 9 до 10 или от 99 до 100. – bzak

+0

Очень приятно Divakar ... +1 – Rashid

+0

@bzak Проверьте изменения? – Divakar

2

Вы можете использовать функцию char, чтобы преобразовать массив ячеек строки в массив символов, где все строки будут дополнены длиной самого длинного.

Так что для вас:

charNames = char(names) ; 

, то вы можете использовать fprintf:

fprintf(fid, '%d %s %d\n',ii, charNames(ii,:) , vals(ii)) ; 

Просто убедитесь, что ваш массив ячеек является Колум, прежде чем превратить его в уголь.

+2

Очень приятно! Для первого столбца, когда он изменяется от 99 до 100, можно использовать этот трюк массива char там: - charIDs = char (strtrim (cellstr (num2str ([1: numel (names)].)))), А затем используйте 'charIDs' вместо' ii'. – Divakar

Смежные вопросы