fprintf: новая строка после определенной точки - PullRequest
0 голосов
/ 25 сентября 2018

См. Код ниже.

fileID = fopen('test.txt', 'w');
fprintf(fileID, '{%f, %f},    ', array1(1:end))
fclose(fileID)

Я бы хотел, чтобы вывод был в формате:

{1,1}, {2,2}, {3,3}, {4,4},
{5,5}, {6,6}, {7,7}, {8,8},
...

Однако вместо этого я получаю:

{1,1}, {2,2}, {3,3}, {4,4}, {5,5}, {6,6}, {7,7}, {8,8}, ...

Предположим, большоенабор данных.

Я знаю, что могу добавить '\ n' в поле fprintf, но это даст мне новую строку после каждой пары значений.

Как вставить новую строкув определенный момент после количества «итераций» х (в моем случае после каждой 4-й пары значений)?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете построить строку формата во время выполнения , используя x в качестве параметра:

x = 4;
fprintf(fileID, [repmat('{%f, %f}, ',1,x-1) '{%f, %f},\n'], array1(1:end))

Пример в окне команд:

>> array1 = [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8];
>> fileID = 1; % STDOUT
>> x = 4;
>> fprintf(fileID, [repmat('{%f, %f}, ',1,x-1) '{%f, %f},\n'], array1(1:end))

печать

{1.000000, 1.000000}, {2.000000, 2.000000}, {3.000000, 3.000000}, {4.000000, 4.000000},
{5.000000, 5.000000}, {6.000000, 6.000000}, {7.000000, 7.000000}, {8.000000, 8.000000},

Если вам нужно удалить последнюю запятую , добавьте

fprintf(fileID, '\b\b\n')

в конце.Так, в предыдущем примере

>> fprintf(fileID, [repmat('{%f, %f}, ',1,x-1) '{%f, %f},\n'], array1(1:end)), fprintf(fileID, '\b\b\n')

дает

{1.000000, 1.000000}, {2.000000, 2.000000}, {3.000000, 3.000000}, {4.000000, 4.000000},
{5.000000, 5.000000}, {6.000000, 6.000000}, {7.000000, 7.000000}, {8.000000, 8.000000}
0 голосов
/ 25 сентября 2018

Для этого вам нужно создать формат для всей строки:

nb_pairs = 4;
format = [strjoin(repmat({'{%f, %f},'}, 1, nb_pairs), ' ') '\n'];
% format = '{%f, %f}, {%f, %f}, {%f, %f}, {%f, %f},\n'
fprintf(fileID, format, array1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...