删除matlab fprintf文件输出中的空白填充

时间:2016-07-14 17:29:29

标签: string matlab file-io formatting printf

我有大量的数据矩阵,看起来像这样:

DataOut' = [34 1 0.0 -4.75343000000000 0.0291776000000000 5.32835000000000 1.23598000000000 0.890008000000000;
7 1 0.0902364000000000 -4.74065000000000 0.0 1.97133000000000 9.49706000000000 16.1658000000000]

前两列是ID,总是整数,其余6列是每对相应ID的2对(X,Y,Z)坐标(浮点数)。

我使用以下语法将数据写入文件:

fprintf(' %u %u %-6.12g %-6.12g %-6.12g %-6.12g %-6.12g %-6.12g \r\n', DataOut)
>>  34 1 0      -4.75343 0.0291776 5.32835 1.23598 0.890008 
    7 1 0.0902364 -4.74065 0      1.97133 9.49706 16.1658  

这种格式在几乎所有情况下都很好,除了上面强调的那个,其中无效的尾随零被空格替换,导致某些列之间的间隙很大而不是单个空格。读取这些数据的软件在发现超过预期的数据时,确实不喜欢所有这些空格和中断。

我想要的输出是每列之间只有一个空格:

>> 34 1 0 -4.75343 0.0291776 5.32835 1.23598 0.890008 
   7 1 0.0902364 -4.74065 0 1.97133 9.49706 16.1658

有没有人知道如何获取fprintf在删除无效的尾随零后留下一个空格?使用fprintf是很好的,因为我不需要任何循环,当你有几千个这样的矩阵被写出来时,如果我不得不在循环中进行一些检查,那我会觉得很慢?

1 个答案:

答案 0 :(得分:0)

您用于浮点数(xhr.setRequestHeader('X-Mashape-Key', 'KEY'); //xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.setRequestHeader('Authorization', 'Client-ID ID'); xhr.onload = function (data) { var response = JSON.parse(xhr.responseText); if (response && response.data && response.data.link) { response = response.data.link.replace(/^http:\/\//i, 'https://'); var img = new Image(); img.src = response; // check dimensions - 2000 x 400 ideal img.onload = function () { successCallback(response); }; } else { if (failCallback) { failCallback(); } } imageService.loadComplete(); }; xhr.send(fd); )物种的格式规范,您要删除不重要的尾随零(小数点后最多12个数字)。但是,%-6.12g指定您希望每个字段至少 6个字符宽。对于-6,它的宽度为1,因此0将其填充为6个字符宽(因此所有空格)。如果您只是从每个格式说明符的开头删除fprintf,您将获得所需的输出。

-6