'\ b'产生退格不工作在fprintf到txt文件(MATLAB)
我想用单元格数组的内容制作一个文本文件。以下是MWE。当我使用没有文件参数的fprintf
(只在命令窗口中打印时,例如fprintf(['\t\\hline ',repmat('%s & ',1,size(A,1)),'\b\b','\\\\','\n'],A{:})
),代码工作得很好。但是,当我用fopen
打开一个文件并尝试向它写入相同的内容时,双后退(\b\b
)不起作用。' b'产生退格不工作在fprintf到txt文件(MATLAB)
MWE:
A = num2cell(rand(3,3));
fid = fopen('test.txt','w');
fprintf(fid,['\t\\hline ',repmat('%s & ',1,size(A,1)),'\b\b','\\\\','\n'],A{:})
我在命令窗口中得到什么:
\hline 7.922073e-01 & 9.594924e-01 & 6.557407e-01 \\
\hline 3.571168e-02 & 8.491293e-01 & 9.339932e-01 \\
\hline 6.787352e-01 & 7.577401e-01 & 7.431325e-01 \\
我能得到什么的 '的test.txt' 文件:
\hline 7.922073e-01 & 9.594924e-01 & 6.557407e-01 & \\
\hline 3.571168e-02 & 8.491293e-01 & 9.339932e-01 & \\
\hline 6.787352e-01 & 7.577401e-01 & 7.431325e-01 & \\
和粘贴时这个问题的'test.txt'的内容,而不是像他们在.txt文件中看到的那样显示,有些框显示了后面的位置步伐应该已经被应用(如下图)。我怎样才能让backspaces工作并删除.txt文件中的&
?
我不认为这是如何写入文件正常工作。 fprintf
将它接收的每个字符按顺序写入文件,而不回溯或解释数据。 '\b'
(char(8)
)的原始字节值不代表所有文件中的退格(例如,在图像/二进制数据中)。正如你所说,如果你用真正的文本编辑器打开文件(例如,不是记事本或文本编辑器),你会发现它确实包括了退格,可能表示为问号或打开框或“BS”。像Matlab命令窗口一样,终端通常会在显示文本之前预处理文本。 This page提供了一些背景。
我不知道在Matlab中改变fprintf
这种行为的方法。您需要在将文本打印到文件之前预处理文本,或者后处理文件以应用退格和重写。
在我看来,一个更可读的解决方案是:
A = num2cell(rand(3,3));
fid = fopen('test.txt','w');
str = repmat('%f & ',1,size(A,1));
fprintf(fid,['\t\\hline ',str(1:end-2),'\\\\','\n'],A{:});
fclose(fid);
你也可以做这样的事情,如果你真的想保持退格键:
A = num2cell(rand(3,3));
fid = fopen('test.txt','w');
str = sprintf(['\t\\hline ',repmat('%f & ',1,size(A,1)),'\b\b','\\\\','\n'],A{:});
fprintf(fid,'%s',str);
fclose(fid);
如果使用代码在你的问题,你是在OS X或Linux上,你可以使用unix
命令做这样的事情(从here)写一个新的文件与应用的backspaces:
unix('cat test.txt | col -b > test2.txt')
如果'A'的内容是浮点数,则应该使用'%f'而不是'%s' – rahnema1
@ rahnema1这并不能解决问题。 – Rodrigues
[相关](https://stackoverflow.com/questions/43299376/writing-a-backspace-in-a-file/43299424)。它将退格的ASCII码写入文件。 – rahnema1