fprintf:特定点后的新行

时间:2018-09-25 12:10:41

标签: matlab printf

请参见下面的代码。

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

假设一个大数据集。

我知道我可以在fprintf字段中添加一个'\ n',但这只会在每对值之后给我换行。

如何在“迭代次数”为“ x”(在我的情况下,每4对值之后)的某个点插入新行?

2 个答案:

答案 0 :(得分:3)

为此,您必须为整行创建格式:

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);

答案 1 :(得分:2)

您可以使用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}