dlmwriter 在每个字符之间放置空格

Posted

技术标签:

【中文标题】dlmwriter 在每个字符之间放置空格【英文标题】:dlmwriter puts space between each character 【发布时间】:2016-02-02 21:04:13 【问题描述】:

我正在尝试将一个相当大的二进制数组写入文本文件。我的数据维度是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 ....

【问题讨论】:

dlmwrite 的文档明确声明它适用于 numeric 数据。编写分隔的混合数据并不是 MATLAB 的强项之一。使用fprintfrepmat,类似于this question 【参考方案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);

【讨论】:

感谢@user1877862 的详细而清晰的解释!

以上是关于dlmwriter 在每个字符之间放置空格的主要内容,如果未能解决你的问题,请参考以下文章

在每个字符之间允许空格[重复]

如何将空格字符放入 XML 中的字符串名称中?

使用fstream写a时的空格

Ptyhon :生成一个1到50的大字符串,每个数字之间有个空格 1 2 3 4 ..........50

在数字和字符之间插入一个空格

python练习-生成一个1到50的大字符串每个数字之间有个空格