dlmwriter在每个角色之间放置空格

时间:2016-02-02 21:04:13

标签: matlab text-files export-to-text

我正在尝试将一个非常大的二进制数组写入文本文件。我的数据维度为1 X 35,000,就像:

0 0 0 1 0 0 0 .... 0 0 0 1

我想要做的是首先在这个数组的开头添加一个字符串,然后说ROW1,然后将这个数组导出到带有空格分隔符的文本文件中。

到目前为止我尝试过:

fww1 = strcat({'ROW_'},int2str(1));
fww2 = strtrim(cellstr(num2str((full(array(1,:)))'))');

new = [fww1 fww2];

dlmwrite('text1.txt', new,'delimiter',' ','-append', 'newline', 'pc'); 

由于这段代码,我得到了:

R O W _ 1 0 0 0 0 1 ....

我怎样才能得到如下:

ROW_1 0 0 0 0 1 ....

1 个答案:

答案 0 :(得分:1)

写入文本文件最灵活的方法是使用fprintf。有一点学习曲线(你需要找出格式说明符,即%d等),但它绝对值得,而且许多其他编程语言都有一些实现fprintf

因此,对于您的问题,请执行以下操作。首先,我们打开一个文件进行写作。

fid = fopen('text1.txt', 'wt');

'wt'表示我们打开文件以便以文字模式书写。接下来,让我们写下您想要的字符串:

row_no = 1;
fprintf(fid, 'ROW_%d', row_no);

%d是一个特殊字符,告诉fprintf用给定数字的十进制表示替换它。在这种情况下,它的行为很像int2str(也许num2str是一个更好的类比,因为它也适用于非整数)。

接下来,我们将编写数据行。同样,我们将使用%d来指定我们想要一个布尔数组的十进制表示。

fprintf(fid, ' %d', array(row_no,:));

有几点需要注意。首先,我们格式说明符还包括每个数字前面的空格,以便处理分隔符。其次,我们只指定了一种格式,而是一组数字。面对这种情况时,fprintf将继续重复格式,直到数字用完为止。

接下来,我们会写一个换行符来表示行的结尾(\nfprintf识别的特殊字符之一):

fprintf(fid, '\n');

如果要写更多行,可以在这些fprintf语句上放置for循环。最后,我们将关闭文件,以便操作系统知道我们已经完成了写入。

fclose(fid);